Comment mapper un servlet pour obtenir des informations de chemin supplémentaires avec getPathInfo ()
Question
Je rencontre un problème où Tomcat traite des informations de chemin supplémentaires dans le nom du servlet. Cela casse de nombreuses fonctionnalités RESTFul dans notre application Web (nous utilisons des informations de chemin supplémentaires plutôt que des paires? Nom = valeur pour les liens conviviaux pour les robots d'exploration).
Cela fonctionnait correctement auparavant, mais il s'est rompu après l'ajout de mappages explicites et la suppression du servlet Invoker
que nous utilisions auparavant pour servir nos servlets. Par exemple, considérons le lien suivant:
http://mydomain.com/servlet/MyServlet/param1/param2/param2/param3
MyServlet
était appelé correctement et "/ param1 / param2 / param3". a été renvoyé par getPathInfo ()
sur HttpServletRequest
.
Maintenant, il semble que Tomcat tente de charger MyServlet / param1 / param2 / param3 en tant que servlet:
[23 / sept / 2008: 16: 44: 23-0700] "GET / servlet / MyServlet / param1 / param2 / param3 HTTP / 1.0 " 404
Voici la façon dont ils sont définis et mappés dans le fichier web.xml, et en appuyant simplement sur " http://mydomain.com/servlet/MyServlet " fonctionne bien.
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.myclass.etcetera.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/servlet/MyServlet</url-pattern>
</servlet-mapping>
La solution
Vous devez le mapper vers / servlet / MyServlet / *
Il vous manque la fin du fichier "/ *".