Que fait le double caractère générique (*) sur un servlet mappage d'url-pattern veux dire?
Je me demandais quelle est la différence de l'utilisation d'un unique ou double jokers pour décrire une url-pattern sur une servlet cartographie.
Par exemple: quelle est la différence ci-dessous?
1)
<servlet-mapping id="...">
<servlet-name>BuyServlet</servlet-name>
<url-pattern>/buy/*</url-pattern>
</servlet-mapping>
2)
<servlet-mapping id="...">
<servlet-name>ShopServlet</servlet-name>
<url-pattern>/shop/**</url-pattern>
</servlet-mapping>
EDIT:
@Andrew est à droite, le cahier des charges parle uniquement un caractère générique (*).
J'ai vérifié mon code et a remarqué que l'endroit où j'ai trouvé un double astérisque (**) a été, au Printemps de SimpleUrlHandlerMapping bean.
Dans ce cas, c'est logique. Comme par la classe doc, il utilise AntPathMatcher, qui stipule:
La cartographie correspond à des URLs en utilisant les règles suivantes: ? correspond à l'un
caractère
* correspond à zéro ou plusieurs caractères
** correspond à zéro ou plusieurs répertoires dans un chemin
- Je pense que seule la première
*
sera utilisé comme générique, et le 2e*
est traitée commeliteral *
. Autant que je sache,*
est traitée comme caractère générique, lorsque utilisé en plus de/
. - Où avez-vous vu cette utilisation?
- Voir stackoverflow.com/questions/15479213, le double astérisque peut être utilisé dans un
<mvc:resources mapping="/static/**" location="/static/" />
de configuration et est défini dans le Printemps AntPathMatcher
Vous devez vous connecter pour publier un commentaire.
L'article 11.2 de la spécification servlet (version 2.5) les états suivants:
Donc je suppose que la deuxième variante (
**
) n'a aucun sens.P. S. j'ai juste essayé de mettre en place une telle cartographie, et il semble que seule cette url exacte
/shop/**
seront appariés (Tomcat 6.0.32).La Servlet spécification elle-même (la Version 3.0, Chapitre 12.2) ne définit que deux types de mappage de caractères génériques:
E. g. "/foo/" correspond à toutes les demandes pour les Url commençant par "http://server/context/foo/" et ".jsp" correspond à toutes les demandes d'URL se terminant par ".jsp".
Suivant la spécification, la chaîne vide ("") et une seule barre oblique ("/") ont des significations spécifiques. "Toutes les autres chaînes sont utilisés pour les correspondances exactes seulement."
Suivant la spécification strictement, votre deuxième exemple n'est pas un modèle générique à tous, mais doit correspondre à "/shop/**" exactement. La plupart des conteneurs de Servlet sont cependant moins strictes et permettent d'utiliser le caractère générique * à l'emplacement arbitraire ou offre encore plus complexe options de correspondance.
Pas le cas dans la spécification de parler de second cas.
Comme par spécification servlet 12.2
Conformément à la spécification de la deuxième serait considérée comme exacte de match seulement. Il peut varier en fonction des fournisseurs de serveur.