I am writing to this list after inquiries elsewhere have turned up no adequate responses. I hope it is the correct forum for the question, since I am having trouble on Tomcat whereas I didn't on Resin and need to know how the Tomcat container handles the HttpServletResponseWrapper.
I have a servlet which needs to write a JSP page's resultant HTML to a file instead of sending it back to the browser. I do this by wrapping the response with HttpServletResponseWrapper, calling RequestDispatcher and forward on the wrapped response, which runs the JSP and writes the resultant HTML to a file, then forward control to a thankyou.html page. This works with Resin. However, in Tomcat, when I wrap the response, I "commit" the original response object and can not forward to a thank you page. I catch a "java.lang.IllegalStateException: Cannot forward after response has been committed". In my debug tests, the response is committed during the RequestDispatchers forward method. I need to avoid this. The templates (1 and 2) are all JavaServer Pages whose output (HTML) is intercepted and written to file by the MyServletResponse wrapper. How do I do this without "committing" the response object. I could find no way of duplicating or cloning the object before passing it to MyServletResponse's constructor. Nor could I close the ServletOutputStreams. Any ideas? This worked wonderfully on Resin, but not Tomcat 4.0.1. I prefer to use Tomcat. If this cannot work, I need to know so I can move on. If there is a better way to handle it, I'm open to that as well. Additionally it is ENTIRELY reasonable to assume that I have implemented the wrapper incorrectly. Thank you, Jay Wright THE SERVLET CODE: MyServletResponse wrapper1 = new MyServletResponse (response, "1_content.txt"); MyServletResponse wrapper2 = new MyServletResponse (response, "2_content.txt"); rd = request.getRequestDispatcher(template1); rd.include(request, wrapper1); wrapper1.close(); rd = request.getRequestDispatcher(template2); rd.include(request, wrapper2 ); wrapper2 .close(); request.getRequestDispatcher(getScreenFlowManager().getTemplate(locale)).for ward(request, response); MY WRAPPER CLASS: public class MyServletResponse extends HttpServletResponseWrapper { private PrintWriter printWriter; private ServletOutputStream servletOutputStream; /** * Constructor */ public MyServletResponse (HttpServletResponse response, String filename) throws java.io.IOException { super(response); servletOutputStream = response.getOutputStream(); File file = new File(filename); String fileCreated = file.toString(); printWriter = new PrintWriter(new BufferedWriter(new FileWriter(fileCreated))); } public ServletOutputStream getOutputStream() throws java.io.IOException { return servletOutputStream; } public void setOutputStream(ServletOutputStream sos) throws java.io.IOException { servletOutputStream = sos; } public PrintWriter getWriter() throws java.io.IOException { return printWriter; } public void close() { this.printWriter.close(); } } -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>