Wiosna: różnica / ** i / * w odniesieniu do ścieżek

83

Jaka jest różnica między dwiema gwiazdkami zamiast jednej gwiazdki, gdy odnosimy się do ścieżek?

Wcześniej debugowałem projekt Spring 3. Próbowałem dodać plik .swf za pomocą

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

Z moim serwletem ResourceServlet web.xml wyglądającym tak

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

Ale niestety otrzymywałem ten błąd:

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

Wydało mi się to naprawdę dziwne, ponieważ imagesuzyskano dostęp do wszystkich moich obrazów w folderze, ale dlaczego mój plik .swf był „chroniony”?

Potem zdecydowałem się zmienić /resources/*, aby /resources/**i ona w końcu działało. Moje pytanie brzmi ... dlaczego?

mpmp
źródło
Czy na pewno to /resources/**działa <url-pattern>?
axtavt
Na marginesie, org.springframework.js.resource.ResourceServlet jest przestarzały. Z przewodnika Spring Web Flow : „Zauważ, że począwszy od wersji 3.0.4, Spring Framework zawiera zamiennik dla ResourceServlet (zobacz dokumentację Spring Framework )”.
informatik01

Odpowiedzi:

49

Jest to wzorzec ścieżki, który został użyty w programie Apache ant, zespół Spring implementuje go i używa w całym frameworku.

Dla odniesienia, zobacz javadoc w AntPathMatcher ( najnowszy javadoc wydaje się mieć problem, więc łączę stary).

Wracając do twojego problemu, zgodnie z dokumentem, ma on tylko 3 zasady:

  1. ? dopasowuje jeden znak
  2. * dopasowuje zero lub więcej znaków
  3. ** dopasowuje zero lub więcej „katalogów” w ścieżce
Rangi Lin
źródło
1
Czy można *dopasować to, czego **nie można?
Alexander Suraphel,
3
Zauważ, że AntPathMatcher firmy Springs zawiera błędy: nie jest w pełni zgodny ze stylem mrówek. Przykład: **/*.cssnie będzie działać dla ścieżek zaczynających się od a /, natomiast powinno być zgodne z konwencjami Ant Style.
Devabc