Java Mailing List Archive

http://www.junlu.com/

Home » Home (12/2007) » Tomcat Users »

RE: How is catch{} code handled

George Sexton

2004-01-02

Replies:

Unfortunately, your logic is flawed.

The major flaw is that sendRedirect() does not terminate processing of
the servlet. IOW, this is happening:

Servlet Invoked
 Sub-Routine Invoked
   SQLException Generated
   Exception Caught
   Send-Redirect to Error Handler
   exit Sub-Routine Via Return
 More code executed
 Send-Redirect() Issued -> Throws IllegalStateException


Essentially, because you are not checking the return state from your
sub-routine, you are having a problem. You need to return some sort of
value from the sub-routine that indicates processing should stop.

-----Original Message-----
From: Merrill Cornish [mailto:merrill.cornish@(protected)]
Sent: Friday, January 02, 2004 12:06 PM
To: Tomcat Users List
Subject: How is catch{} code handled


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@(protected)
For additional commands, e-mail: tomcat-user-help@(protected)


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@(protected)
For additional commands, e-mail: tomcat-user-help@(protected)



©2008 junlu.com - Jax Systems, LLC, U.S.A.