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ż images
uzyskano 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?
spring
web
resources
url-pattern
mpmp
źródło
źródło
/resources/**
działa<url-pattern>
?Odpowiedzi:
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:
?
dopasowuje jeden znak*
dopasowuje zero lub więcej znaków**
dopasowuje zero lub więcej „katalogów” w ścieżceźródło
*
dopasować to, czego**
nie można?**/*.css
nie będzie działać dla ścieżek zaczynających się od a/
, natomiast powinno być zgodne z konwencjami Ant Style.