2010-12-07 36 views
26

J'ai un problème lié au mappage de servlet. Je suit dans web.xml:Mappage de servlet: modèle d'URL pour les URL avec slash de fin

<servlet> 
    <servlet-name>HelloWorldServlet</servlet-name> 
    <servlet-class>test.HelloWorldServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>HelloWorldServlet</servlet-name> 
    <url-pattern>/HelloWorld</url-pattern> 
</servlet-mapping> 

Si je donne accès à http://localhost:<port>/MyApp/HelloWorld le servlet HelloWorldServlet est appelée.

Je souhaite également que mon servlet réponde à http://localhost:<port>/MyApp/HelloWorld/. Comment puis-je obtenir cet effet? Je développe avec NetBeans mais il ne me permet pas de mettre un motif terminé avec /.

+0

Cela ne fonctionne-t-il pas déjà? – thejh

+1

Que se passe-t-il si vous mettez le "/" final? – darioo

+0

Si je modifie le fichier XML sans le frontal netbeans et déploie le projet, les images, css et js ne sont pas chargées O.o. –

Répondre

29

Une fois que vous avez ajouté votre joker sur votre <url-pattern>

<url-pattern>/HelloWorld/*</url-pattern> 

Vous pouvez obtenir le chemin supplémentaire associé à l'URL en utilisant HttpServletRequest.getPathInfo().

E.g.

http://localhost:<port>/MyApp/HelloWorld/one/

Le résultat sera

/one/ 

De l'JavaDoc:

Retours toute l'information de chemin supplémentaire associé à l'URL du client envoyé quand il a fait cette demande. L'information de chemin supplémentaire suit le chemin de servlet mais précède la chaîne de requête et commence par un caractère "/" .

7

Utilisez un caractère générique. Vous pouvez rediriger tout le trafic allant vers une URL spécifique vers le même servlet. Par exemple, vous pouvez ajouter ce qui suit:

<servlet-mapping> 
    <servlet-name>HelloWorldServlet</servlet-name> 
    <url-pattern>/HelloWorld/*</url-pattern> 
</servlet-mapping> 

Ceci permet de rediriger l'URL avec une barre oblique à votre servlet d'origine.

Une pensée - ceci redirigerait n'importe quoi à ce modèle d'URL au servlet. Si vous souhaitez que d'autres URL dépassent cette URL, vous devez créer une servlet qui redirigera vers l'URL correcte (en regardant l'URL spécifiée). Vous pouvez également utiliser un framework qui fournit le mappage pour vous.