当我们引用路径时,两个星号和一个星号有什么区别?
早些时候我正在调试我的 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/*
to /resources/**
终于成功了。我的问题是……为什么?
这是一个路径模式用于阿帕奇蚂蚁 https://ant.apache.org/图书馆。 Spring 团队实现了它并在整个框架中使用它。
回到你的问题。根据 Javadoc 的说法AntPathMatcher https://docs.spring.io/spring-framework/docs/3.0.x/javadoc-api/org/springframework/util/AntPathMatcher.html,它只有3条规则:
-
?
匹配一个字符
-
*
匹配零个或多个字符
-
**
匹配路径中的零个或多个“目录”
2022 年更新
在最新的 Spring Framework 版本中,有第四条规则:
-
{spring:[a-z]+}
匹配正则表达式[a-z]+
作为名为“spring”的路径变量
请参阅最新(截至目前)Spring 框架的详细信息版本5Java文档:AntPathMathcer https://docs.spring.io/spring-framework/docs/5.3.x/javadoc-api/org/springframework/util/AntPathMatcher.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)