The illegalStateException while sendRedirect happens because some content has already been submitted to client, thus the http code (OK) was already send and it's too late to change headers. Check your action don't do make output in the action.

Thomas Okken wrote:
Hi all,

I'm running into a problem in a struts application I'm working on.
In my struts-config.xml, I have this action-mapping:

      <action path="/register"
          scope="session"
          name="RegistrationForm"
          type="com.foo.RegistrationAction">
          <forward name="success" path="/index.jsp" redirect="true"/>
          <forward name="failure" path="/register.jsp" redirect="true"/>
      </action>

The RegistrationAction.execute() method takes several request parameters and uses them to create an account; when this is successful, it returns mapping.findForward("success"), and otherwise, it returns mapping.findForward("failure"). For reasons I have not been able to determine, the redirection often fails. RegistrationAction.execute() will run successfully, the mapping.findForward() succeeds and finds the correct forward, which is then returned -- but an exception is thrown while the redirect is sent to the client. This is the full log output:

Jan 9, 2008 11:11:35 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet action threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435) at org.apache.struts.chain.commands.servlet.PerformForward.handleAsRedirect(PerformForward.java:125) at org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:94) at org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54) at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
  at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
  at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
  at java.lang.Thread.run(Thread.java:595)
Jan 9, 2008 11:11:35 AM org.apache.catalina.core.StandardHostValve custom
SEVERE: Exception Processing ErrorPage[exceptionType=java.lang.Exception, location=/error.jsp]
java.lang.IllegalStateException
  at org.apache.coyote.Response.reset(Response.java:297)
  at org.apache.catalina.connector.Response.reset(Response.java:652)
  at org.apache.catalina.connector.Response.reset(Response.java:916)
at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:417) at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:271) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
  at java.lang.Thread.run(Thread.java:595)

I understand that the second exception happens because, after sending a redirect, it is no longer possible to forward to the error page, but what is a complete mystery to me is why the first exception occurs. RegistrationAction.execute() never touches the response, so struts should have no problem sending the redirect to /index.jsp (or back to /register.jsp, in the case of failure). This exception does not happen consistently. Sometimes it does, sometimes it doesn't, with no pattern that I have been able to find. Even when I post the exact same request over and over.
I'm using Struts 1.3 and Tomcat 6.0.14.

- Thomas

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


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

Reply via email to