web-dev-qa-db-fra.com

Mappage de servlet: modèle d'URL pour les URL avec une barre oblique de fin

J'ai un problème lié au mappage de servlet. J'ai les éléments suivants dans web.xml:

<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 j'accède à http://localhost:<port>/MyApp/HelloWorld le servlet HelloWorldServlet est appelé.

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

26
Gabriel Llamas

Après avoir ajouté votre caractère générique sur votre <url-pattern>

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

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

Par exemple.

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

Le résultat sera

/one/

Depuis JavaDoc:

Renvoie toutes les informations de chemin supplémentaires associées à l'URL envoyée par le client lors de sa demande. Les informations de chemin supplémentaires suivent le chemin du servlet mais précèdent la chaîne de requête et commenceront par un caractère "/".

29
Buhake Sindi

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

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

Cela redirigera l'URL avec une barre oblique vers votre servlet d'origine.

Une pensée - cela redirigerait n'importe quoi vers ce modèle d'URL vers la servlet. Si vous souhaitez avoir d'autres URL après cette URL, vous devez créer un servlet qui redirigera vers l'URL correcte (en regardant l'URL spécifiée). Alternativement, vous pouvez utiliser un framework qui fournit une cartographie pour vous.

7
Jonathan B