web-dev-qa-db-fra.com

plusieurs motifs d'URL pour le même servlet

Je dois mapper le même servlet sur deux URL différentes. J'utilisais netbeans 7.0.1 pour gérer l'ensemble de mon projet. J'ai donc utilisé son interface conviviale pour modifier le fichier web.xml. Ce que netbeans créé est ceci:

<servlet-mapping>
    <servlet-name>fred</servlet-name>
    <url-pattern>*.jsp</url-pattern>
    <url-pattern>/url</url-pattern>
</servlet-mapping>

Ceci est lu par Tomcat 5.5 sans émettre d'erreur, mais seul le second modèle fonctionne, alors que le premier est ignoré.

J'ai trouvé sur Google que le bon moyen pour Tomcat est celui-ci:

<servlet-mapping>
    <servlet-name>fred</servlet-name>
    <url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>fred</servlet-name>
    <url-pattern>/url</url-pattern>
</servlet-mapping>

Donc, mes questions: est-ce un bug dans Tomcat? Quelle syntaxe les autres conteneurs acceptent-ils?

32
eppesuig

Je suppose que cela a plus à voir avec les spécifications de servlet utilisées par container/netbeans plutôt que d'être un problème avec le conteneur. Votre haricot net semble utiliser la spécification 2.5 pour construire le mappage de servlet et vous obtenez donc 

<servlet-mapping>
   <servlet-name>fred</servlet-name>
   <url-pattern>*.jsp</url-pattern>
   <url-pattern>/url</url-pattern>
</servlet-mapping>

En savoir plus à ce sujet ici . Ça dit

Les versions précédentes du schéma de servlet n'autorisent qu'un seul modèle d'URL dans un fichier filter mapping.Pour les filtres mappés sur plusieurs URL, cela entraîne inutile répétition de clauses de mappage complètes.

42
Aravind A

Le conteneur Tomcat supportera 3 modèles d'URL:

  1. séquence complète de caractères
  2. /*
  3. *. ext (étoile signifie n'importe quoi)

/* est recommandé pour un seul framework

si vous utilisez plusieurs frameworks, alors recommandé .*

1
Satish Dodia