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