Redirection Apache Tomcat - IllegalStateException lors de la navigation dans l'application
Je suis en utilisant Apache 2.2 et Tomcat 6.0.18 sur Windows XP. J'ai activé le module mod_proxy pour rediriger le trafic à partir de mon serveur web Apache Tomcat. J'ai seulement mis à jour le httpd.fichier conf pour avoir la redirection comme ceci:
ProxyPass /myapp http://MYMACHINENAME:8080/MyApp/Start
ProxyPassReverse /myapp http://MYMACHINENAME:8080/MyApp/Start
Le problème que je rencontre est que la première redirection fonctionne très bien, les JSP page s'affiche correctement. Lorsque j'essaie de naviguer vers une autre page JSP en cliquant sur un menu sur la page, j'obtiens l'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)
Si je ne fais pas de redirection à partir de Apache, la navigation fonctionne bien.
Les idées de ce que je devrais regarder?
TIA,
Magnus Lassi
La question est un peu déroutant parce que Apache n'est PAS une redirection vers Tomcat -- c'est le proxy de la requête HTTP de Tomcat. Merci de poster le code approprié pour StartIntro.java et ResponseFacade.java.
Ce code n'est pas très jolie, mais j'ai juste été chargé d'obtenir la configuration de travail pour le moment. StartIntro.java protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String url = ""; paramètre de Chaîne de requête=.getParameter("myParameter"); if (isParamValid(paramater)) { if (paramater.equals("1")) { url="./Ventes/Introduction.jsp"; } réponse.sendRedirect(url); }
La redirection de la page, Introduction.jsp <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@page import="Partagé.BaseServlet"%> <% SalesProxy salesProxy = (SalesProxy) session.getAttribute("salesProxy" ); %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Infos Ventes</title> </head> <body style="width: 775px;"> <form name="mainform" method="post" action="salesIntroduction" id="mainform"> trucs avec statique HTML </form> </body> </html>
Ce code n'est pas très jolie, mais j'ai juste été chargé d'obtenir la configuration de travail pour le moment. StartIntro.java protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String url = ""; paramètre de Chaîne de requête=.getParameter("myParameter"); if (isParamValid(paramater)) { if (paramater.equals("1")) { url="./Ventes/Introduction.jsp"; } réponse.sendRedirect(url); }
La redirection de la page, Introduction.jsp <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@page import="Partagé.BaseServlet"%> <% SalesProxy salesProxy = (SalesProxy) session.getAttribute("salesProxy" ); %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Infos Ventes</title> </head> <body style="width: 775px;"> <form name="mainform" method="post" action="salesIntroduction" id="mainform"> trucs avec statique HTML </form> </body> </html>
OriginalL'auteur Magnus Lassi | 2009-05-08
Vous devez vous connecter pour publier un commentaire.
Bien que c'est un vieux sujet qui a été attisée par la communauté, je vais poster mes pensées:
Cela peut se produire si quelque chose dans
StartIntro#doPost()
a déjà commis la réponse. Une réponse est engagée lorsque l'un des cas suivants est rempli:forward()
ouinclude()
a été appelée sur la même réponse avant.flush()
est invoquée.Je voudrais communiquer ce que l'
StartIntro#doPost()
est tous en train de faire. Mentionnés 2KB est appserver-dépendant si, dans le cas de Tomcat c'est configureable comme la taille de la mémoire tampon du connecteur HTTP.Je voudrais ajouter, une erreur commune parmi les partants, c'est qu'ils pensent que l'appel d'un
forward()
ou unsendRedirect()
serait comme par magie de sortie et de "sauter" de la méthode de bloc, par les présentes, en ignorant le reste du code. Par exemple:Donc c'est effectivement pas vrai. Pour corriger cela, vous devez ajouter un
return;
instruction à la fin de laif
bloc, ou d'introduire uneelse
bloc pour laredirect()
appel.Espère que cette information aide à mettre le doigt sur la cause racine.
Vous êtes les bienvenus.
OriginalL'auteur BalusC
Vous pouvez utiliser le ProxySet directive:
Voir plus à la Documentation D'Apache
OriginalL'auteur David Rabinowitz
Utilisation AJP Proxy, qui est pris en charge par Apache 2.2 et Tomcat 6.0.18.
Vous aurez besoin pour installer mod_proxy_ajp pour apache si elle n'est pas déjà installé, et assurez-vous que tomcat est configuré pour écouter les connexions ajp (à vérifier server.xml).
Par défaut de Tomcat 6.0.18 écoute pour les connexions AJP dans le port 8009.
Ensuite, vous devez ajouter quelque chose comme ceci dans votre httpd.conf
Alors vous pouvez aller à http://apachehost/yoururl et tous redirection devrait être transparente.
En outre, il est plus efficace que html proxy car ajp est un plus faible niveau de protocole de.
OriginalL'auteur Jaime Hablutzel
Vous avez commis votre Réponse et vous êtes probablement vous êtes l'écriture de Données sur JSP pourrait être par le biais de la Liste ou JSON.
Si vous rediriger vers le Même JSP et vous êtes de retour de la CHAÎNE comme "succès" alors cette exception se produit.Parce que de Retourner avec SUCCÈS par le biais de STRUTS@ engage Votre Réponse et il ne permettrait pas à poster toutes les autres données de votre JSP.
Solution : Tout ce que vous devez faire est de RETOURNER la valeur NULL et Rediriger vers la même page JSP..
Espérons qu'Il Vous aide
OriginalL'auteur MeeT