Return-Path: Delivered-To: apmail-tomcat-users-archive@www.apache.org Received: (qmail 75299 invoked from network); 29 Apr 2009 18:57:39 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 29 Apr 2009 18:57:39 -0000 Received: (qmail 41701 invoked by uid 500); 29 Apr 2009 18:57:34 -0000 Delivered-To: apmail-tomcat-users-archive@tomcat.apache.org Received: (qmail 41641 invoked by uid 500); 29 Apr 2009 18:57:34 -0000 Mailing-List: contact users-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tomcat Users List" Delivered-To: mailing list users@tomcat.apache.org Received: (qmail 41630 invoked by uid 99); 29 Apr 2009 18:57:34 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 29 Apr 2009 18:57:34 +0000 X-ASF-Spam-Status: No, hits=1.2 required=10.0 tests=SPF_NEUTRAL X-Spam-Check-By: apache.org Received-SPF: neutral (nike.apache.org: local policy) Received: from [206.190.37.120] (HELO smtp110.rog.mail.re2.yahoo.com) (206.190.37.120) by apache.org (qpsmtpd/0.29) with SMTP; Wed, 29 Apr 2009 18:57:25 +0000 Received: (qmail 38401 invoked from network); 29 Apr 2009 18:57:04 -0000 Received: from unknown (HELO ?192.168.1.100?) (dcherk@99.237.222.163 with plain) by smtp110.rog.mail.re2.yahoo.com with SMTP; 29 Apr 2009 18:57:04 -0000 X-YMail-OSG: zy26bAMVM1lFo1rgETkvrPId_JOSPqEkmrp68zuLoAfU4UUJkYtXrhQRixlx2JZwhg-- X-Yahoo-Newman-Property: ymail-3 Message-ID: <49F8A2FE.2070307@djinnsoft.com> Date: Wed, 29 Apr 2009 14:57:02 -0400 From: Dave Cherkassky User-Agent: Thunderbird 2.0.0.21 (Windows/20090302) MIME-Version: 1.0 To: users@tomcat.apache.org Subject: Servlets that use response.getOutputStream(): do they play nicely with Tomcat's error pages? Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org 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: java.lang.Throwable /myError.jsp Last, here's myError.jsp: <%@ page isErrorPage='true' %>

System Error

You have encountered a system error.

<%-- custom error processing that can't be done in a static .html page --%> 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-unsubscribe@tomcat.apache.org For additional commands, e-mail: users-help@tomcat.apache.org