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;
}
}