Подтвердить что ты не робот

Spring: разность /** и/* относительно путей

Какая разница между двумя звездочками вместо одной звездочки, когда мы ссылаемся на пути?

Ранее я отлаживал свой проект Spring 3. Я пытался добавить .swf, используя

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

С моим web.xml ResourceServlet, похожим на

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

Но, к сожалению, я получал эту ошибку:

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

Мне показалось, что это действительно странно, поскольку все мои изображения в папке images были доступны, но как мой .swf был "защищен"?

Впоследствии я решил изменить /resources/* на /resources/**, и он наконец-то сработал. Мой вопрос: почему?

4b9b3361

Ответ 1

  • Звездочка ('*') соответствует нулю или нескольким символам, вплоть до появления символа '/' (который служит в качестве разделителя путей). Строка, такая как "/abcd/docs/index.html", не будет успешно соответствовать шаблону '/\*/\*.index.html'. Первая звездочка соответствует только первому разделителю пути, в результате получается строка "abcd". Успешный шаблон соответствия будет '/\*/\*/\*.html'.
  • Строка, содержащая две звездочки ('\*\*'), соответствует нолю или нескольким символам. Сюда может входить разделитель путей '/'. В этом случае "/abcd/docs/index.html" будет успешно соответствовать шаблону '/\*\*/\*.html'. Двойная звездочка, включая разделитель путей, будет соответствовать строке "abcd/docs". ​​

Надеюсь, что это поможет!

Ответ 2

Это шаблон пути, который используется в команде Apache ant, spring, реализует его и использует его во всей структуре.

Для справки см. javadoc AntPathMatcher (новейший javadoc, похоже, имеет проблему, поэтому я ссылку старого).

Возвращаясь к вашей проблеме, в соответствии с документом, у нее есть только 3 правила:

  • ? соответствует одному символу
  • * соответствует нулю или нескольким символам
  • ** соответствует нулю или более "каталогам" в пути