web-dev-qa-db-fra.com

Printemps: Différence de / ** et / * en ce qui concerne les chemins

Quelle est la différence entre deux astérisques au lieu d'un astérisque lorsque nous nous référons à des chemins?

Plus tôt, je déboguais mon projet Spring 3. J'essayais d'ajouter un .swf en utilisant

<spring:url var="flashy" value="/resources/images/flash.swf"/>

Avec ResourceServlet de mon web.xml ressemblant

<servlet-name>Resource Servlet </servlet-name>
<url-pattern>/resources/*</url-pattern>

Mais malheureusement, j'obtenais cette erreur:

WARN org.springframework.js.resources.ResourceServlet - An attempt to access a protected resource at /images/flash.swf was disallowed.

Je l'ai trouvé vraiment étrange puisque toutes mes images dans le dossier images ont été accédées mais comment se fait-il que mon .swf ait été "protégé"?

Ensuite, j'ai décidé de changer le /resources/* à /resources/** et ça a finalement fonctionné. Ma question est ... pourquoi?

74
mpmp

Il s'agit d'un modèle de chemin utilisé dans Apache ant, l'équipe de printemps l'implémente et l'utilise dans tout le framework.

Pour référence, voir javadoc de AntPathMatcher ( le plus récent javadoc semble avoir un problème, donc je lie un ancien).

Revenons à votre problème, selon le document, il n'a que 3 règles:

  1. ? correspond à un caractère
  2. * correspond à zéro ou plusieurs caractères
  3. ** correspond à zéro ou plusieurs "répertoires" dans un chemin
39
Rangi Lin