You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by Pilho Kim <ph...@math.soongsil.ac.kr> on 2000/07/31 04:29:18 UTC

To fix some flush error of JSP pages

Hi,

The purpose of this patch is to fix some flush error of JSP pages.
Lets make an flush error by the following senario:

 1) First, visit a jsp page (taking long-initial-loading-time),
    say /examples/jsp/num/numguess.jsp.

 2) Press the 'Stop' button of your browser
    before the JSP page is leaded completely.

 3) Next, visit another jsp page, say /examples/jsp/snp/snoop.jsp.

 4) Then you will meet the following error messages in your console.


[--------------- begin of error message ------------------------]

2000-07-31 09:35:42 - Context: IOException in R( /examples +
/jsp/num/numguess.j
sp + null) - java.net.SocketException: Connection reset by peer: socket
write er
ror
        at java.net.SocketOutputStream.socketWrite(Native Method)
        at java.net.SocketOutputStream.write(SocketOutputStream.java:83)
        at
org.apache.tomcat.service.http.HttpResponseAdapter.doWrite(HttpRespon
seAdapter.java:164)
        at
org.apache.tomcat.core.BufferedServletOutputStream.doWrite(BufferedSe
rvletOutputStream.java:121)
        at
org.apache.tomcat.core.BufferedServletOutputStream.reallyFlush(Buffer
edServletOutputStream.java:249)
        at
org.apache.tomcat.core.ResponseImpl.flushBuffer(ResponseImpl.java:403
)
        at
org.apache.tomcat.facade.HttpServletResponseFacade.flushBuffer(HttpSe
rvletResponseFacade.java:296)
        at
org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:209)

        at
jsp.num._0002fjsp_0002fnum_0002fnumguess_0002ejspnumguess_jsp_0._jspS
ervice(_0002fjsp_0002fnum_0002fnumguess_0002ejspnumguess_jsp_0.java:162)
        at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:119)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at
org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspSer
vlet.java:181)
        at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:3
00)
        at
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:373)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at
org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:3
79)
        at org.apache.tomcat.core.Handler.service(Handler.java:262)
        at
org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:367
)
        at
org.apache.tomcat.core.ContextManager.internalService(ContextManager.
java:721)
        at
org.apache.tomcat.core.ContextManager.service(ContextManager.java:667
)
        at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnectio
n(HttpConnectionHandler.java:195)
        at
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:
393)
        at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java
:507)
        at java.lang.Thread.run(Thread.java:484)

[---------------  end of error message  ------------------------]



Do you agree with me?
Okay, the following patch would fix the above error of the CVS repository:

 $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/jasper
/compiler/JspParseEventListener.java,v 1.19 2000/07/11 03:48:34 alex Exp $
 $Revision: 1.19 $
 $Date: 2000/07/11 03:48:34 $


[--------------- begin of patch ------------------------]

    private void generateFooter() throws JasperException {
	writer.popIndent();
	//writer.println("} catch (Throwable t) {");
	writer.println("} catch (Exception ex) {");
	writer.pushIndent();
        writer.println("if (out.getBufferSize() != 0)");
        writer.pushIndent();
	writer.println("out.clearBuffer();");
	writer.popIndent();
	writer.println("pageContext.handlePageException(ex);");
	writer.popIndent();
	writer.println("} finally {");
	writer.pushIndent();
	/* Do stuff here for finally actions... */
        //writer.println("out.close();");
-       writer.println("out.flush();");
+       // writer.println("out.flush();");     // This should be removed
here to fix a JSP flush error !!
	writer.println("_jspxFactory.releasePageContext(pageContext);");
	writer.popIndent();
	writer.println("}");
	// Close the service method:
	writer.popIndent();
	writer.println("}");

	// Close the class definition:
	writer.popIndent();
	writer.println("}");
    }

[---------------  end of patch  ------------------------]



Thanks

Kim, Pilho