Cómo asignar un servlet para obtener información de ruta adicional con getPathInfo()
Pregunta
Tengo un problema en el que Tomcat trata información de ruta adicional como parte del nombre del servlet.Esto está rompiendo un montón de funciones RESTFul en nuestra aplicación web (usamos información de ruta adicional en lugar de pares ?nombre=valor para enlaces amigables para rastreadores).
Funcionaba correctamente antes, pero se rompió después de agregar asignaciones explícitas y eliminar el Invoker
servlet que usamos anteriormente para servir nuestros servlets.Por ejemplo, considere el siguiente enlace:
MyServlet
solía ser llamado correctamente, y "/param1/param2/param3" fue devuelto por getPathInfo()
sobre el HttpServletRequest
.
Ahora, parece que Tomcat está intentando cargar MyServlet/param1/param2/param3 como servlet:
23/sep/2008: 16: 44: 23 -0700] "get/servlet/myservlet/param1/param2/param3 http/1.0" 404
Aquí está la forma en que se definen y se mapean en el Web.xml, y solo golpean "http://midominio.com/servlet/MyServlet" funciona 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>
Solución
Necesita asignarlo a /servlet/MyServlet/*
Te falta el "/*" final.