Come mappare un Servlet per ottenere ulteriori informazioni sul percorso con getPathInfo ()
Domanda
Sto riscontrando un problema in cui Tomcat sta trattando le informazioni sul percorso extra come parte del nome del servlet. Questo sta rompendo un sacco di funzionalità RESTFul nella nostra webapp (usiamo informazioni extra sul percorso piuttosto che? Coppie nome = valore per i collegamenti di tipo crawler).
In precedenza funzionava correttamente, ma si è rotto dopo l'aggiunta di mapping espliciti e la rimozione del servlet Invoker
che in precedenza utilizzavamo per servire i nostri servlet. Ad esempio, considera il seguente link:
MyServlet
veniva chiamato correttamente e " / param1 / param2 / param3 " è stato restituito da getPathInfo ()
su HttpServletRequest
.
Ora, sembra che Tomcat stia tentando di caricare MyServlet / param1 / param2 / param3 come servlet:
[23 / set / 2008: 16: 44: 23 -0700] " OTTIENI / Servlet / MyServlet / param1 / param2 / param3 HTTP / 1.0 " 404
Ecco come sono definiti e mappati in web.xml e solo colpendo " http://mydomain.com/servlet/MyServlet " funziona bene.
<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>
Soluzione
Devi mapparlo su / servlet / MyServlet / *
Ti manca il finale " / * " ;.