Return-Path: Mailing-List: contact tomcat-dev-help@jakarta.apache.org; run by ezmlm Delivered-To: mailing list tomcat-dev@jakarta.apache.org Received: (qmail 33424 invoked by uid 500); 10 Nov 2000 02:06:33 -0000 Delivered-To: apmail-jakarta-tomcat-cvs@apache.org Received: (qmail 33421 invoked by uid 1059); 10 Nov 2000 02:06:33 -0000 Date: 10 Nov 2000 02:06:32 -0000 Message-ID: <20001110020632.33420.qmail@locus.apache.org> From: craigmcc@locus.apache.org To: jakarta-tomcat-cvs@apache.org Subject: cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/core Handler.java craigmcc 00/11/09 18:06:32 Modified: src/share/org/apache/tomcat/core Tag: tomcat_32 Handler.java Log: Restore the previous exception propogation model so that exceptions are propogated only from included servlets. This undoes part of a change Larry committed earlier -- after further discussion with him, we've agreed that this is the correct behavior so that servlets can trap exceptions thrown by included servlets without corrupting the content of the response. NOTE: If you include a JSP page that declares an error page, and your JSP page throws an exception, the transfer to the error page will still happen as expected even in an included page. This is handled completely within the JSP environment, and did not rely on the error propogation mechanism for servlet exceptions -- which was Larry's primary concern. As a result of this change, Tomcat 3.2 will trigger the handling only if the top-level servlet throws an exception. This is also consistent with the behavior of Tomcat 4.0 in this respect. Revision Changes Path No revision No revision 1.7.2.6 +27 -21 jakarta-tomcat/src/share/org/apache/tomcat/core/Handler.java Index: Handler.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Handler.java,v retrieving revision 1.7.2.5 retrieving revision 1.7.2.6 diff -u -r1.7.2.5 -r1.7.2.6 --- Handler.java 2000/11/09 14:11:27 1.7.2.5 +++ Handler.java 2000/11/10 02:06:32 1.7.2.6 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Handler.java,v 1.7.2.5 2000/11/09 14:11:27 larryi Exp $ - * $Revision: 1.7.2.5 $ - * $Date: 2000/11/09 14:11:27 $ + * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Handler.java,v 1.7.2.6 2000/11/10 02:06:32 craigmcc Exp $ + * $Revision: 1.7.2.6 $ + * $Date: 2000/11/10 02:06:32 $ * * ==================================================================== * @@ -258,16 +258,19 @@ contextM.handleStatus( req, res, 404); return; } - // handle error, does nothing if already handled - contextM.handleError( req, res, ex); - // rethrow the exception context.log("Exception in init " + ex.getMessage(), ex ); - if (ex instanceof IOException) - throw (IOException) ex; - else if (ex instanceof ServletException) - throw (ServletException) ex; - else - throw new ServletException("Servlet Init Exception", ex); + if (res.isIncluded()) { // Only propogate on includes + if (ex instanceof IOException) + throw (IOException) ex; + else if (ex instanceof ServletException) + throw (ServletException) ex; + else + throw new ServletException + ("Servlet Init Exception", ex); + } else { // Only handle on top level + contextM.handleError( req, res, ex ); + return; + } } } } @@ -289,17 +292,20 @@ if( t==null ) return; - // handle error, does nothing if already handled + // Rethrow the exception if we are inside an include + if (res.isIncluded()) { + // context.log("Rethrowing doService exception: " + t); + if (t instanceof IOException) + throw (IOException) t; + else if (t instanceof ServletException) + throw (ServletException) t; + else + throw new ServletException("Servlet Exception", t); + } + + // handle error, does nothing if already handled, at top level contextM.handleError( req, res, t ); - // rethrow the exception - context.log("Rethrowing doService exception: " + t); - if (t instanceof IOException) - throw (IOException) t; - else if (t instanceof ServletException) - throw (ServletException) t; - else - throw new ServletException("Servlet Exception", t); } // protected void handleError( Request req, Response res, Throwable t) {