tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ethan Wallwork" <>
Subject RE: Hello? Anybody?
Date Thu, 02 Nov 2000 17:38:53 GMT
Thank you for responding!

The PageContext.handleException() is for handling unhandled page level
exceptions.  It is declared as throwing ServletException and IOException.  The
Tomcat implementation calls the errorPage if there is one, otherwise it wraps
the exception in a ServletException and throws it.  This exception will then
eventually get thrown out of the generated JSP servlet's service() method.  I
have no problem with this behavior.

The issue is with what happens when a ServletException gets thrown out of the
service() method of a servlet.  Currently Tomcat always catches this exception
and tries to do something with it.  If you have specified an error page in the
web.xml file it calls that, otherwise it calls the default one.  Under normal
circumstances this is the best it can do, but when the call has been made by a
RequestDispatcher that is not the case.  As it turns out, our application would
be able to recover nicely from a situation where the included servlet failed,
but there is no way for it to find out.  This kind of control is important when
generating pages that need to be perfectly formed (such as WML).

Since the spec implies that exceptions should be thrown from a
RequestDispatcher call rather than handled, and there seems to be nothing in
the spec that forbids this behavior, I would like to see it implemented this
way.  Does anyone know of any reasons it shouldn't be done this way?


-----Original Message-----
From: Larry Isaacs []
Sent: Thursday, November 02, 2000 8:03 AM
Subject: RE: Hello? Anybody?

Hi Ethan,

I was hoping that someone more experienced would respond.  I am looking
at an issue related to servlets throwing UnavailableExceptions which is
impacted by the tendency of and to eat
exceptions.  As a result, I've been trying to reach an understanding of
how exceptions should be handled in these files.

I am not an "expert" on the Servlet and JSP specs, so I'm not sure if
there is unwritten intent in the spec that just isn't visible.  My
"strict" interpretation of 8.5 is that it only requires that any
exceptions propagated back must be ServletExceptions or IOExceptions.
It doesn't appear to mandate that all or any exceptions be propagated

The lack of a mandate is a little more apparent with JSP. PageContext's
handlePageException method appears to be what JSP generated servlets are
expected to call for unhandled exceptions.  The API documentation for
handlePageException says that if no error page is specified, it should
perform "some implementation dependent action."  It also doesn't require
any exceptions be throw back to a caller if present.

Thus, I'm not convinced that Tomcat's handling of exceptions for
RequestDispatcher forwarded or included servlets and JSPs is out of spec.
Others, please correct me if I'm wrong or missed something.

I work mostly on an IDE, and haven't spent much time developing real
web applications.  For handling something like this, my guess is that
you would specify <error-page>(s) in your web.xml that direct the
exceptions to an error handling servlet to deal with them.


-----Original Message-----
From: Ethan Wallwork []
Sent: Wednesday, November 01, 2000 11:58 AM
Subject: Hello? Anybody?

Can someone PLEASE respond on this?  Even if only to tell me I have no idea
what I'm talking about? I really would like to find out what the proper
behaviour for Tomcat in this situation is.

Thank you,


-----Original Message-----
From: Ethan Wallwork []
Sent: Monday, October 30, 2000 10:31 AM
Subject: RE: BugRat Report #213 has been filed.

Has anyone looked at this?  It is a real problem for us, and if others agree it
should be changed I will get started on a fix.


-----Original Message-----
From: BugRat Mail System []
Sent: Wednesday, October 04, 2000 2:13 PM
Subject: BugRat Report #213 has been filed.

Bug report #213 has just been filed.

You can view the report at the following URL:


REPORT #213 Details.

Project: Tomcat
Category: Bug Report
SubCategory: New Bug Report
Class: swbug
State: received
Priority: medium
Severity: serious
Confidence: public
   Release: 3.1, 3.2
   JVM Release: any
   Operating System: any
   OS Release: any
   Platform: any

RequestDispatcher does not propagate errors

If a servlet uses a RequestDispatcher to forward or include a second servlet
(or JSP), and the second servlet throws and exception from it's service method,
that exception is not propagated to the first servlet.

This is a problem if you have a setup (like ours) where a single "master"
servlet includes a particular JSP depending on thing other than just the
request URI, and you want it to be able to handle the errors.  As it is, the
error gets handled by Tomcat (using default error page, or whatever error page
you've configured in the JSP or web.xml file) and the main servlet never knows
anything went wrong.

In Tomcat 3.2, the RequestDispatcher forward/include methods call the Handler
service method.  This service method never throws an exception.  In Tomcat 3.1
it calls the ServletWrapper handleRequest method, which also never throws and

The reason I think exceptions should be propagated is because of section 8.5 of
the servlet spec, which strongly implies it:

Only runtime exceptions and checked exceptions of type ServletException or
IOException should be propagated to the calling servlet if thrown by the target
of a request dispatcher.  All other exceptions should be wrapped as a
ServletException and the root cause of the exception set to the original

To unsubscribe, e-mail:
For additional commands, e-mail:

To unsubscribe, e-mail:
For additional commands, e-mail:

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message