BugRat Report # 213

Project: Tomcat Release: 3.1, 3.2
Category: Bug Report SubCategory: New Bug Report
Class: swbug State: received
Priority: medium Severity: serious
Confidence: public

Submitter: _Anonymous ( anonymous-bug@cortexity.com )
Date Submitted: Oct 4 2000, 03:13:29 CDT
Responsible: Z_Tomcat Alias ( tomcat-bugs@cortexity.com )

RequestDispatcher does not propagate errors
Environment: (jvm, os, osrel, platform)
any, any, any, any

Additional Environment Description:

Report Description:
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 exception. The reason I think exceptions should be propagated is because of section 8.5 of the servlet spec, which strongly implies it: 8.5 ERROR HANDLING 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 exception.

How To Reproduce:

View this report online...