No problem, write a servelt or other JSP page that does a method='post' to
the JSP in question.  You will have to read the output of the page into a
variable.  Then you can write the variable to both a file and out.println.

The only catch is you will have to have a class that can do a post! See the
attatchment...
-- 

-Geoff Marshall, Director of Development

.......................................................
t e r r a s c o p e                      (415) 951-4944
54 Mint Street, Suite 110         direct (415) 625-0349
San Francisco, CA  94103             fax (415) 625-0306
.......................................................

> From: [EMAIL PROTECTED]
> Reply-To: Orion-Interest <[EMAIL PROTECTED]>
> Date: Thu, 1 Mar 2001 11:32:25 -0500
> To: Orion-Interest <[EMAIL PROTECTED]>
> Subject: Capturing the output of a JSP page as HTML
> 
> Can anyone tell me if this is possible.  I have a JSP page that contains
> information about an order that was just entered (Essentially a
> confirmation page).  What I want to do is somehow intercept the output
> stream inside the JSP page and write it to a file, as plain html, which I
> will later attach to an email and send to someone.
> 
> Thanks,
> Andy
> 
> 
> 

package db;

import java.io.*;
import java.net.*;
import java.util.*;

public class RequestBean
{

    private String host;
    private Vector args;
    private String query;
    private String template;
    private String NEWLINE;
    private String method;

    public RequestBean()
    {
        query = "";
        template = "";
        NEWLINE = "\n";
        method = "post";
        host = "";
        args = new Vector();
        NEWLINE = System.getProperty("line.separator");
        
                
System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
    }

    public void setHost(String s)
    {
        host = s;
        query = "";
    }

    public String getHost()
    {
        return host;
    }

    public void setMethod(String s)
    {
        method = s;
    }

    public String getMethod()
    {
        return method;
    }

    public void setQuery(String s)
    {
        query = s;
    }

    public String getQuery()
    {
        return query;
    }

    public void setArgs(Vector vector)
    {
        args = vector;
    }

    public Vector getArgs()
    {
        return args;
    }

    public void addPair(String s, String s1)
    {
        args.addElement(s);
        args.addElement(s1);
    }

    public void setTemplate(String s)
    {
        template = s;
    }

    public String getTemplate()
    {
        return template;
    }

    public String action()
    {
        if(method.equalsIgnoreCase("get"))
            return doGet();
        else
            return doPost();
    }

    public String doPost()
    {
        Object obj = null;
        URLConnection urlconnection = null;
        String s2 = host;
        String s3 = "";
        if(query.length() > 0)
            s2 = s2 + "?" + query;
       
       // Build string of name/value pairs for post
       String s = "";
       Enumeration enumeration = args.elements();
       while(enumeration.hasMoreElements()) 
        {
            if(s.length() > 0)
                s = s + "&";
                
            s = s + (String)enumeration.nextElement() + "=";
            s = s + URLEncoder.encode((String)enumeration.nextElement());
        }
        
        try
        {
            URL url = new URL(s2);
            urlconnection = url.openConnection();
            urlconnection.setDoOutput(true);
            urlconnection.setDoInput(true);
            urlconnection.setUseCaches(false);
            urlconnection.setRequestProperty("content-type", 
"application/x-www-form-urlencoded");
            PrintWriter printwriter = new PrintWriter(urlconnection.getOutputStream());
            printwriter.print(s); // send post parms
            printwriter.close();
        }
        catch(Exception _ex)
        {
            return "EXCEPTION 1:" + _ex;
        }
        
        try
        {
            BufferedReader bufferedreader = new BufferedReader(new 
InputStreamReader(urlconnection.getInputStream()));
            String s1;
            try
            {
                while((s1 = bufferedreader.readLine()) != null) 
                    s3 = s3 + s1 + NEWLINE;
            }
            catch(Exception _ex) { }
            bufferedreader.close();
        }
        catch(Exception _ex)
        {
            return "EXCEPTION 2:" + _ex;
        }
        
        return s3;
    }

    public String doGet()
    {
        Object obj = null;
        URLConnection urlconnection = null;
        String s = "";
        String s2 = host;
        String s3 = "";
        if(query.length() > 0)
            s2 = s2 + "?" + query;
        try
        {
            URL url = new URL(s2);
            urlconnection = url.openConnection();
            urlconnection.setDoInput(true);
            urlconnection.setUseCaches(false);
        }
        catch(Exception _ex)
        {
            return "";
        }
        try
        {
            BufferedReader bufferedreader = new BufferedReader(new 
InputStreamReader(urlconnection.getInputStream()));
            String s1;
            try
            {
                while((s1 = bufferedreader.readLine()) != null) 
                    s3 = s3 + s1 + NEWLINE;
            }
            catch(Exception _ex) { }
            bufferedreader.close();
        }
        catch(Exception _ex)
        {
            return "";
        }
        return s3;
    }

    public Vector parse(String s)
    {
        Vector vector = new Vector();
        if(s == null)
            return vector;
        if(s.length() == 0 || template.length() == 0)
            return vector;
        StringTokenizer stringtokenizer = new StringTokenizer(template, " ," + 
NEWLINE);
        if(!stringtokenizer.hasMoreTokens())
            return vector;
        String s1 = stringtokenizer.nextToken();
        if(!stringtokenizer.hasMoreTokens())
        {
            if(s1.charAt(0) == '%')
                setElement(vector, s, getInteger(s1));
            return vector;
        }
        String s3;
        String s4;
        if(s1.equalsIgnoreCase("?T"))
        {
            s3 = skipTags(s);
            s4 = s3;
        } else
        if(s1.equalsIgnoreCase("*T"))
        {
            int i;
            if((i = s.indexOf("<")) < 0)
                return vector;
            s3 = skipTags(s.substring(i));
            s4 = s3;
        } else
        {
            if(s1.charAt(0) == '%')
            {
                setElement(vector, s, getInteger(s1));
                return vector;
            }
            int j;
            if((j = s.indexOf(s1)) < 0)
                return vector;
            if(j == s.length() - s1.length())
                return vector;
            s3 = s.substring(j + s1.length()).trim();
            s4 = s3;
        }
        while(stringtokenizer.hasMoreTokens() && s3.length() > 0) 
        {
            String s2 = stringtokenizer.nextToken();
            if(s2.equalsIgnoreCase("*T"))
            {
                if(s3.charAt(0) == '<')
                    s3 = skipTags(s3);
                else
                    return parse(s4);
            } else
            if(s2.equalsIgnoreCase("?T"))
                s3 = skipTags(s3);
            else
            if(s2.charAt(0) == '%')
            {
                int k = getInteger(s2);
                if(k <= 0)
                    return vector;
                if(!stringtokenizer.hasMoreTokens())
                {
                    setElement(vector, s3, k);
                    return vector;
                }
                s2 = stringtokenizer.nextToken();
                if(s2.charAt(0) == '%')
                    return vector;
                if(s2.equalsIgnoreCase("*T"))
                {
                    int l = s3.indexOf("<");
                    if(l < 0)
                        return parse(s4);
                    if(l == 0)
                        setElement(vector, "", k);
                    else
                        setElement(vector, s3.substring(0, l).trim(), k);
                    s3 = s3.substring(l);
                    s3 = skipTags(s3.trim());
                } else
                if(s2.equalsIgnoreCase("?T"))
                {
                    int i1 = s3.indexOf("<");
                    if(!stringtokenizer.hasMoreTokens())
                    {
                        if(i1 < 0)
                            setElement(vector, s3.trim(), k);
                        else
                        if(i1 == 0)
                            setElement(vector, "", k);
                        else
                            setElement(vector, s3.substring(0, i1).trim(), k);
                        return vector;
                    }
                    s2 = stringtokenizer.nextToken();
                    if(s2.equalsIgnoreCase("*T") || s2.equalsIgnoreCase("?T") || 
s2.charAt(0) == '%')
                        return vector;
                    int k1 = s3.indexOf(s2, i1);
                    if(k1 < 0)
                        return parse(s4);
                    if(k1 == 0)
                        setElement(vector, "", k);
                    else
                        setElement(vector, s3.substring(0, i1).trim(), k);
                    s3 = s3.substring(k1 + s2.length()).trim();
                } else
                {
                    int j1 = s3.indexOf(s2);
                    if(j1 < 0)
                        return parse(s4);
                    if(j1 == 0)
                        setElement(vector, "", k);
                    else
                        setElement(vector, s3.substring(0, j1).trim(), k);
                    s3 = s3.substring(j1 + s2.length()).trim();
                }
            } else
            if(s3.startsWith(s2))
                s3 = s3.substring(s2.length()).trim();
            else
                return parse(s4);
        }
        return vector;
    }

    private String skipTags(String s)
    {
        String s1;
        for(s1 = s; s1.startsWith("<");)
        {
            while(s1.length() > 0 && !s1.startsWith(">")) 
                s1 = s1.substring(1).trim();
            if(s1.startsWith(">"))
                s1 = s1.substring(1).trim();
        }

        return s1.trim();
    }

    private void setElement(Vector vector, Object obj, int i)
    {
        int k = (i + 1) - vector.size();
        for(int j = 1; j <= k; j++)
            vector.addElement("");

        vector.setElementAt(obj, i);
    }

    private int getInteger(String s)
    {
        int i;
        try
        {
            i = Integer.parseInt(s.substring(1));
        }
        catch(Exception _ex)
        {
            i = -1;
        }
        return i;
    }
}

Reply via email to