2013-09-27 1 views
0

En utilisant ICEFaces 1.8.2 et Tomcat 6.0.24, j'ai créé une seule page jspx. Cette page contient seulement trois champs de saisie et quelques textes de sortie. La page se recharge toutes les 10 minutes à cause d'un meta refresh. Lorsque j'ouvre la page dans FireFox 23 et la laisse ouverte pendant un certain temps, la page est redirigée vers une URL inexistante, ce qui provoque l'affichage de la page d'erreur. L'URL buildserver/proef/terminal/sample ... est redirigée vers buildserver/proef/terminal/inal/sample ...Qui cause la redirection: Tomcat ou ICEFaces?

Ma question est: qu'est-ce qui fait que la page est redirigée vers la mauvaise URL? Est-ce un problème avec Tomcat ou ICEFaces? Je n'utilise pas le serveur Web d'Apache pour rediriger le trafic HTTP vers Tomcat. J'ai même vu la redirection se produire lors de l'exécution de Tomcat dans Eclipse.

Voici un résumé de la communication entre le navigateur et Tomcat capturé avec Wireshask:

GET /proef/terminal/sample_label_print.jspx?location=004-PRODEE HTTP/1.1 

Host: buildserver 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: nl,en-us;q=0.7,en;q=0.3 
Accept-Encoding: gzip, deflate 
DNT: 1 
Cookie: JSESSIONID=57AC0E6B2F86B115AE984F3B7E7FBA93; ice.sessions=; updates=; ice.lease=1380208450505; JSESSIONID.8be0fa73=1f4e10ca702da469c4b0c37f42905d6a; screenResolution=1680x1050; JSESSIONID.48b2edef=c66cf618a1d31a7cef66687c8f6c0550; bconn=Bv54BVUkcK2uDN4y25NcvA:50:acquired 
Connection: keep-alive 
Cache-Control: max-age=0 

HTTP/1.1 302 Moved Temporarily 

Server: Apache-Coyote/1.1 
Pragma: no-cache 
Cache-Control: no-cache 
Expires: 0 
Cache-Control: no-cache 
Cache-Control: no-store 
Cache-Control: must-revalidate 
Location: http://buildserver/proef/terminal/inal/sample_label_print.jspx 
Content-Type: text/html;charset=UTF-8 
Content-Length: 0 
Date: Thu, 26 Sep 2013 15:14:06 GMT 


GET /proef/terminal/inal/sample_label_print.jspx HTTP/1.1 

Host: buildserver 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: nl,en-us;q=0.7,en;q=0.3 
Accept-Encoding: gzip, deflate 
DNT: 1 
Cookie: JSESSIONID=57AC0E6B2F86B115AE984F3B7E7FBA93; ice.sessions=; updates=; ice.lease=1380208450505; JSESSIONID.8be0fa73=1f4e10ca702da469c4b0c37f42905d6a; screenResolution=1680x1050; JSESSIONID.48b2edef=c66cf618a1d31a7cef66687c8f6c0550; bconn=Bv54BVUkcK2uDN4y25NcvA:50:acquired 
Connection: keep-alive 
Cache-Control: max-age=0 


HTTP/1.1 500 Internal Server Error 

Server: Apache-Coyote/1.1 
Pragma: no-cache 
Cache-Control: no-cache 
Expires: 0 
Cache-Control: no-cache 
Cache-Control: no-store 
Cache-Control: must-revalidate 
Content-Type: text/html;charset=UTF-8 
Transfer-Encoding: chunked 
Date: Thu, 26 Sep 2013 15:14:06 GMT 

Toute aide est appréciée.

Répondre

0

Enfin, j'ai trouvé la cause du problème moi-même. Dans mon web.xml j'ai spécifié deux modèles url-:/abc/* pour lesquels une autorisation est requise et/borne/* pour lequel une autorisation n'est pas nécessaire:

<security-constraint> 
    <web-resource-collection> 
     <url-pattern>/abc/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>*</role-name> 
    </auth-constraint> 
</security-constraint> 

<security-constraint> 
    <web-resource-collection> 
     <url-pattern>/terminal/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
</security-constraint> 

Scénario pour reproduire le problème:

  • Ouvrez deux pages dans un navigateur: abc/one.jspx et /terminal/two.jspx
  • Connexion abc/one.jspx
  • Passer à la borne/two.jspx et déclencher une action
  • maintenant Terminal /two.jspx est redirec ted à la borne/Inal/two.jspx

Je sovled le problème en changeant les URL dans les modèles web.xml afin qu'ils aient la même longueur: au lieu de /terminal/* je /trm/*.

Tomcat mélange les modèles d'URL. Est-ce un bug dans Tomcat ou une fonctionnalité non documentée?

Questions connexes