A long question:
First, I have a Servlet that writes to response.getOutputStream(). Here's a
snippet:
public class AuditTrailServlet extends HttpServlet {
public void doGet( HttpServletRequest request, HttpServletResponse response )
response.setContentType( "application/vnd.ms-excel" );
response.setHeader( "Content-Disposition", "attachment; filename=" +
fileName );
ResultSet rs = ...;
for ( int row = 0 ; rs.next(); row++ ) {
// iterate over each row in the ResultSet
for( int col = 0; fieldNameIt.hasNext(); col++ ) {
// iterate over each column in the results, write to spreadsheet
// custom code.
// let us assume this block has a bug that occasionally throws a NullPointerException,
// but only after a bunch of cells are written first.
response.getOutputStream().write( /* excel byte[] */ );
// more custom code.
}
}
rs.close();
response.setStatus( HttpServletResponse.SC_OK );
}
}
Second, I have the following in the web.xml file, to tell tomcat to use a
custom error page:
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/myError.jsp</location>
</error-page>
Last, here's myError.jsp:
<%@ page isErrorPage='true' %>
<html>
<body>
<h1>System Error</h1>
<p>
You have encountered a system error.
</p>
<%-- custom error processing that can't be done in a static .html page --%>
</body>
</html>
So, it all seems standard and straight-forward, right?
However, instead of seeing a nice custom error page when the NPE happens, I get the
"ugly" Tomcat error page, and
the following in the Tomcat logs:
java.lang.IllegalStateException: getOutputStream() has already been called for
this response
at org.apache.catalina.connector.ResponseBase.getWriter(ResponseBase.java:709)
at
org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:127)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:128)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:121)
at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:137)
at
org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:153)
at
org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:148)
at org.apache.jsp.error_jsp._jspService(error_jsp.java:284)
Yes, I know -- I *am* using Tomcat 4.1 (rather than the latest and greatest)
for various legacy and political reasons.
But my question is this:
- Is this a known bug? Or am I doing something wrong with either the servlet,
the web.xml or with the jsp page?
Thanks,
--
Dave Cherkassky
VP of Software Development
DJiNN Software Inc.
416.504.1354
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org