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)
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.