views:

1719

answers:

2

Hi, I'm using Apache 2.2 and Tomcat 6.0.18 on Windows XP. I've enabled the mod_proxy module to redirect the traffic from my Apache web server to Tomcat. I only updated the httpd.conf file to have the redirection like this:

ProxyPass /myapp http://MYMACHINENAME:8080/MyApp/Start ProxyPassReverse /myapp http://MYMACHINENAME:8080/MyApp/Start

The problem I'm experiencing is that the initial redirect works fine, the JSP page renders correctly. When I try to navigate to a different JSP page by clicking on a menu on the page, I get the exception:

SEVERE: Servlet.service() for servlet StartIntro threw exception java.lang.IllegalStateException at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435) at StartIntro.doPost(StartIntro.java:103) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 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:191) 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:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:595)

If I don't do any redirection from Apache, the navigation works fine.

Any ideas what I should look into?

TIA, Magnus Lassi

A: 

You can use the ProxySet directive:

ProxySet ajp://mymachine:7001 <parameters>

See more at the Apache Documentation

David Rabinowitz
A: 

Although this is an old topid which is poked by community, I'll post my thoughts:

java.lang.IllegalStateException
    at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)
    at StartIntro.doPost(StartIntro.java:103)

This can be caused if the StartIntro#doPost() has already committed the response. A response is commited when one of the following cases is met:

  1. A response header has been set before.
  2. A forward() or include() has been invoked on the same response before.
  3. More than 2KB of data is been written to response.
  4. Less than 2KB is been written and flush() is invoked.

I would doublecheck what the StartIntro#doPost() is all doing. The mentioned 2KB is appserver-dependent though, in case of Tomcat it's configureable as buffer size of the HTTP connector.

I would add, a common mistake among starters is that they think that the call of a forward() or a sendRedirect() would magically exit and "jump" out of the method block, hereby ignoring the remnant of the code. For example:

protected void doPost() {
    if (someCondition) {
        forward();
    }
    redirect(); // This is STILL invoked when someCondition is true!
}

This is thus actually not true. To fix this you still need to add a return; statement afterwards or to introduce an else block.

Hope this information helps in nailing down the root cause.

BalusC