You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Jonathan O'Donovan <jo...@eurokom.ie> on 2008/04/24 18:11:31 UTC

Help Needed with Tomcat Stack Traces

Hi All,
I am a relative newcomer to Tomcat and Java and I would really appreciate if a few of you could check my
reasoning here in trying to understand this exception. I am running the following:

Tomcat 4.1
Apache/1.3.33 (Win32) 
mod_jk/1.2.8 
JRE Version 1.4.2_03

About every hour or so on the live web app I get the following stack trace logged to the Tomcat context logger 
(Tomcat doesn't hang) 


008-04-22 09:06:06 ApplicationDispatcher[] Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException
 at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:207)
 at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:240)
 at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:187)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
 at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:627)
 at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:382)
 at org.apache.catalina.core.ApplicationDispatcher.access$000(ApplicationDispatcher.java:66)
 at org.apache.catalina.core.ApplicationDispatcher$PrivilegedForward.run(ApplicationDispatcher.java:81)
 at java.security.AccessController.doPrivileged(Native Method)
 at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:298)
 at my.domain.opentools.ServPublicAreaController.gotoPage(ServPublicAreaController.java:686)
 at my.domain.opentools.ServPublicAreaController.doLogin(ServPublicAreaController.java:177)
 at my.domain.opentools.ServPublicAreaController.service(ServPublicAreaController.java:103)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200)
 at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:51)
 at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:129)
 at java.security.AccessController.doPrivileged(Native Method)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:125)
 at org.securityfilter.filter.SecurityFilter.doFilter(SecurityFilter.java:188)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:166)
 at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:51)
 at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:129)
 at java.security.AccessController.doPrivileged(Native Method)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:125)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
 at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
 at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
 at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
 at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:300)
 at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:374)
 at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:743)
 at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:675)
 at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
 at java.lang.Thread.run(Thread.java:536)
----- Root Cause -----
java.lang.IllegalStateException
 at org.apache.coyote.tomcat4.CoyoteResponseFacade.sendRedirect(CoyoteResponseFacade.java:290)
 at org.apache.jsp.login_jsp._jspService(login_jsp.java:102)
 at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:92)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
 at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:162)
 at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:240)
 at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:187)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
 at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:627)
 at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:382)
 at org.apache.catalina.core.ApplicationDispatcher.access$000(ApplicationDispatcher.java:66)
 at org.apache.catalina.core.ApplicationDispatcher$PrivilegedForward.run(ApplicationDispatcher.java:81)
 at java.security.AccessController.doPrivileged(Native Method)
 at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:298)
 at my.domain.opentools.ServPublicAreaController.gotoPage(ServPublicAreaController.java:686)
 at my.domain.opentools.ServPublicAreaController.doLogin(ServPublicAreaController.java:177)
 at my.domain.opentools.ServPublicAreaController.service(ServPublicAreaController.java:103)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200)
 at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:51)
 at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:129)
 at java.security.AccessController.doPrivileged(Native Method)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:125)
 at org.securityfilter.filter.SecurityFilter.doFilter(SecurityFilter.java:188)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:166)
 at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:51)
 at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:129)
 at java.security.AccessController.doPrivileged(Native Method)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:125)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
 at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
 at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
 at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
 at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
 at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:300)
 at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:374)
 at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:743)
 at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:675)
 at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
 at java.lang.Thread.run(Thread.java:536)




Am I right in saying the following? :

1) These are the the most important entries in the stack trace

----- Root Cause -----
java.lang.IllegalStateException
 at org.apache.coyote.tomcat4.CoyoteResponseFacade.sendRedirect(CoyoteResponseFacade.java:290)
 at org.apache.jsp.login_jsp._jspService(login_jsp.java:102)


2) These are the lines from login_jsp.java taken from the /work directory in Tomcat


101> if(sessionNew) {
102> response.sendRedirect(url_userServletMain);
103> }

So there is a problem with sendRedirect or the parameter url_userServletMain


3) Can anyone tell me if these lines are important or not?

 at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:298)
 at my.domain.opentools.ServPublicAreaController.gotoPage(ServPublicAreaController.java:686)
 at my.domain.opentools.ServPublicAreaController.doLogin(ServPublicAreaController.java:177)
 at my.domain.opentools.ServPublicAreaController.service(ServPublicAreaController.java:103)


Many thanks in advance,
Jonathan.

Re: Help Needed with Tomcat Stack Traces

Posted by Christopher Schultz <ch...@christopherschultz.net>.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Jonathan,

Jonathan O'Donovan wrote:
| Am I right in saying the following? :
|
| 1) These are the the most important entries in the stack trace
|
| ----- Root Cause -----
| java.lang.IllegalStateException
|  at
org.apache.coyote.tomcat4.CoyoteResponseFacade.sendRedirect(CoyoteResponseFacade.java:290)
|  at org.apache.jsp.login_jsp._jspService(login_jsp.java:102)

Yes.

| 2) These are the lines from login_jsp.java taken from the /work
| directory in Tomcat
|
| 101> if(sessionNew) {
| 102> response.sendRedirect(url_userServletMain);
| 103> }
|
| So there is a problem with sendRedirect or the parameter
| url_userServletMain

Now so much a problem with the method or the parameter, but a problem
with the status of the response (see below).

| 3) Can anyone tell me if these lines are important or not?
|
|  at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:298)
|  at
my.domain.opentools.ServPublicAreaController.gotoPage(ServPublicAreaController.java:686)
|  at
my.domain.opentools.ServPublicAreaController.doLogin(ServPublicAreaController.java:177)
|  at
my.domain.opentools.ServPublicAreaController.service(ServPublicAreaController.java:103)

Not so much. These lines indicate that the request was processed by your
ServPublicAreaController servlet and then forwarded-on to another
servlet (which looks like a compiled JSP).

There is no exception message (which is weird) but I would expect that
the IllegalStateException is occurring because your JSP generated some
output (to the response) and then you tried to send a redirect, which is
a response header.

That is not always a big deal, but the response is usually buffered, and
that buffer has a finite size. Once you exceed the size of the buffer,
the response is sent to the client, starting with the headers. Once the
headers have been sent, you can't un-send them and add more headers.

Thus, you get an IllegalStateException because you have asked the
servlet container to sent a redirect (which is done via a response
header) but the headers have already been sent.

There are a couple of ways to fix this.

1. Increase the size of the response buffer. I don't favor this
technique because it's sort of a hack. You're basically giving up on
good design and allowing your code to be sloppy because, hey, you can
always wipe-out the buffer and re-write the response. :(

2. Inspect your JSP to see where you are generating content for the
response. Anything that is not within <jsp:> or <@ ...> tags is
generating response data -- particularly whitespace. So, if you have a
lot of JSP tags on separate lines, then you're sending a whole bunch of
newlines to the response without even realizing it. Another thing you
might want to do is re-evaluate where you perform this redirect. Often,
redirect logic is performed towards the /end/ of a servlet (or JSP, in
this case). At the end of the JSP is where the most content has already
been generated, and where you are most likely to find yourself in this
situation. Consider moving the redirect towards the top of the JSP.

3. Consider switching to a servlet instead of a JSP. JSPs are typically
used for output -- to generate content. Why are you using a JSP if you
aren't sure you are going to be generating content? I have seen reasons
to use redirects in JSPs, but those situations are generally pretty
rare. Are you sure this decision (to redirect) wouldn't be better made
in some other place in the code?

Hope that helps,
- -chris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkgQvB0ACgkQ9CaO5/Lv0PBYUwCcCCMyZ37px1SW+TeOz343u/XM
YKEAoIav3Vu4fqYJ56gsGaeBFiLP/q3w
=p36Q
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org