tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Merrill Cornish <merrill.corn...@earthlink.net>
Subject How is catch{} code handled
Date Fri, 02 Jan 2004 19:05:37 GMT
My sudden IllegalStateException problem turned out to be caused by my 
error handling technique, but I'm not sure why.

When I started this project (as a way or learning JSP), I have 
EVERYTHING in JSP pages, meaning that there was a lot of Java code in <% 
... %> sections of the JSP page.  I added an errorPage declaration to 
each of my JSP pages to divert all errors to my standard error handling 
page--and all was well.

Later, I decided to limit the JSP pages to HTML as much as possible and 
move all of the Java program logic into servlets.  I left the errorPage 
declarations in the JSP pages, although there wasn't much left there to 
throw an exception.

In the servlets, I used the standard try/catch constructs to intercept 
exceptions.  However, I decided I wanted the exceptions caught in 
servlets to be handled by the same error page as the JSP pages used. 
Rather than have EVERY catch{} clause do the redirect, I defined a 
utility subroutine named errorPage() that collected various information 
in the catch{} clause, then called sendRedirect() to the error page.

Separate from these catch{} clauses, whenever the processing in a 
servlet was complete, it ended with a sendRedirect() to the next JSP 
page followed immediately by a return. I had assumed that the 
sendRedirect()s in the main servlet code were "safe" from the 
sendRedirect() in the catch{} cause since--as I understood it--once the 
exception was thrown and the catch{} entered, nothing else in the 
servlet was processed.

However, my "IllegalStateException" experience suggests there is 
something going on with catch{} that I don't understand.  Or, as a 
friend of mine used to say, "I don't understand all I know about that." :-)

To recap, I got an IllegalStateExceptioni pointing to a sendRedirect() 
in a servlet until I effectively removed the sendRedirect() by returning 
before the sendRedirect() could be reached.  Only then did I see an 
SQLException  intercepted by a catch{} and redirected with 
sendRedirect() to the error page.

Why did main servlet processing appear to continue (allowing the second 
sendRedirect() to cause a problem) after the exception was triggered?

Merrill Cornish

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Mime
View raw message