Frühling: Unterschied von / ** und / * in Bezug auf Pfade


80

Was ist der Unterschied zwischen zwei Sternchen anstelle eines Sternchens, wenn wir uns auf Pfade beziehen?

Früher habe ich mein Spring 3-Projekt debuggt. Ich habe versucht, eine .swf mit hinzuzufügen

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

Das ResourceServlet meiner web.xml sieht aus wie

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

Aber leider habe ich diesen Fehler bekommen:

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

Ich fand es wirklich seltsam, da auf alle meine Bilder im imagesOrdner zugegriffen wurde, aber warum war meine .swf "geschützt"?

Danach habe ich beschlossen , die Änderungen /resources/*zu /resources/**und es funktionierte schließlich. Meine Frage ist ... warum?


Sind Sie sicher, dass das /resources/**funktioniert <url-pattern>?
Axtavt

Als Randnotiz ist org.springframework.js.resource.ResourceServlet veraltet. Aus dem Spring Web Flow-Referenzhandbuch : "Beachten Sie, dass das Spring Framework ab Version 3.0.4 einen Ersatz für das ResourceServlet enthält (siehe Spring Framework-Dokumentation )."
informatik01

Antworten:


46

Dies ist ein Pfadmuster, das in Apache antSpring Team implementiert und im gesamten Framework verwendet wird.

Als Referenz siehe javadoc von AntPathMatcher (das neueste javadoc scheint ein Problem zu haben, daher verknüpfe ich ein altes).

Zurück zu Ihrem Problem, laut Dokument gibt es nur drei Regeln:

  1. ? entspricht einem Zeichen
  2. * Entspricht null oder mehr Zeichen
  3. ** Entspricht null oder mehr 'Verzeichnissen' in einem Pfad

1
Ist es möglich *zu passen, was **nicht kann?
Alexander Suraphel

3
Beachten Sie, dass der AntPathMatcher von Springs Fehler enthält: Er entspricht nicht vollständig dem Ant Pattern Style. Beispiel: Funktioniert **/*.cssnicht für Pfade, die mit a beginnen /, obwohl dies gemäß den Ant Style-Konventionen erfolgen sollte.
Devabc
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.