I've not used the wrapper class before, but don't you need to set the
response type before you instantiate the PrintWriter?
Mark
----- Original Message -----
From: "Jay Wright" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Wednesday, January 16, 2002 7:00 PM
Subject: HttpServletResponseWrapper error
> I have a servlet which uses a HttpServletResponseWrapper to wrap a
response,
> write data to a file, then eventually forwards to a jsp to display the
> typical "thank you" page.
>
> The problem is that when I wrap the response, I "commit" the response
object
> and can not forward to a thank you page. I catch a
> "java.lang.IllegalStateException: Cannot forward after response has been
> committed".
>
> I need to avoid this. The templates (1 thru 3) 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 need to use Tomcat.
>
> THE SERVLET CODE:
>
> MyServletResponse wrapper1 = new MyServletResponse (response,
> "1_content.txt");
> MyServletResponse wrapper2 = new MyServletResponse (response,
> "2_content.txt");
> MyServletResponse wrapper3 = new MyServletResponse (response,
> "3_content.txt");
>
> // HTML
> rd = request.getRequestDispatcher(template1);
> rd.include(request, wrapper1);
> wrapper1.close();
>
> // AOL
> rd = request.getRequestDispatcher(template2);
> rd.include(request, wrapper2 );
> wrapper2 .close();
>
> // TEXT
> rd = request.getRequestDispatcher(template3);
> rd.include(request, wrapper3 );
> wrapper3 .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, send email to [EMAIL PROTECTED] and include in the
body
> of the message "signoff SERVLET-INTEREST".
>
> Archives: http://archives.java.sun.com/archives/servlet-interest.html
> Resources: http://java.sun.com/products/servlet/external-resources.html
> LISTSERV Help: http://www.lsoft.com/manuals/user/user.html
>
>
___________________________________________________________________________
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff SERVLET-INTEREST".
Archives: http://archives.java.sun.com/archives/servlet-interest.html
Resources: http://java.sun.com/products/servlet/external-resources.html
LISTSERV Help: http://www.lsoft.com/manuals/user/user.html