Bug 117

Summary: IllegalStateException when error in jsp servlet include encountered BugRat Report#124
Product: Tomcat 3 Reporter: Kelly Campbell <camk>
Component: JasperAssignee: Tomcat Developers Mailing List <dev>
Status: RESOLVED FIXED    
Severity: normal    
Priority: P1    
Version: 3.2.1 Final   
Target Milestone: ---   
Hardware: All   
OS: All   

Description Tomcat Developers Mailing List 2000-09-15 15:14:29 UTC
If a jsp page references a servlet after including some other content, and gets a ClassNotFoundException on that servlet, an IllegalStateException occurs during a buffer reset.
This error is very misleading, and doesn't point to the classpath or servlet setup in web.xml as the cause. It looks like it's an internal error in Tomcat
instead of a simple configuration error.

Stacktraces:

Location:/test/foobar.jsp

Internal Servlet Error:

javax.servlet.ServletException: can't reset buffer after writing to client
        at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:448)
        at _0002ffoobar_0002ejspfoobar_jsp_1._jspService(_0002ffoobar_0002ejspfoobar_jsp_1.java:75)
        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(JspServlet.java:177)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:309)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:382)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:387)
        at org.apache.tomcat.core.Handler.service(Handler.java:263)
        at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:371)
        at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:749)
        at org.apache.tomcat.core.ContextManager.service(ContextManager.java:695)
        at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:207)
        at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:403)
        at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498)
        at java.lang.Thread.run(Thread.java:475)

Root cause: 

java.lang.IllegalStateException: can't reset buffer after writing to client
        at org.apache.tomcat.core.BufferedServletOutputStream.reset(BufferedServletOutputStream.java:296)
        at org.apache.tomcat.core.ResponseImpl.resetBuffer(ResponseImpl.java:395)
        at org.apache.tomcat.core.ContextManager.handleStatus(ContextManager.java:953)
        at org.apache.tomcat.core.Handler.service(Handler.java:249)
        at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:371)
        at org.apache.tomcat.facade.RequestDispatcherImpl.include(RequestDispatcherImpl.java:308)
        at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:407)
        at _0002ffoobar_0002ejspfoobar_jsp_1._jspService(_0002ffoobar_0002ejspfoobar_jsp_1.java:65)
        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(JspServlet.java:177)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:309)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:382)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:387)
        at org.apache.tomcat.core.Handler.service(Handler.java:263)
        at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:371)
        at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:749)
        at org.apache.tomcat.core.ContextManager.service(ContextManager.java:695)
        at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:207)
        at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:403)
        at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498)
        at java.lang.Thread.run(Thread.java:475)
Comment 1 Larry Isaacs 2001-09-10 19:35:10 UTC
This bug was originally logged against Tomcat 3.2b4. In Tomcat 3.2.3,
a 404 error occurs on the missing servlet.  In Tomcat 3.3, a stack trace occurs
similar to the stack traces shown except that the top exception says
"Included servlet threw exception" and the root exception is a
ClassNotFoundException exception naming the missing class.