Spring:/**和/* 在路径方面的区别

zf9nrax1  于 2023-05-27  发布在  Spring
关注(0)|答案(1)|浏览(109)

当我们引用路径时,两个星号而不是一个星号有什么区别?
之前我在调试我的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/**,它终于工作了。我的问题是为什么?

py49o6xq

py49o6xq1#

这是Apache Ant库中使用的 * 路径模式 *。Spring团队实现了它并在整个框架中使用它。
回到你的问题。根据AntPathMatcher的Javadoc,它只有3条规则:

  1. ?匹配一个字符
  2. *匹配零个或多个字符
  3. **匹配路径中的零个或多个“目录”

更新2022

在最新的Spring Framework版本中,有第四条规则:

  1. {spring:[a-z]+}匹配regexp [a-z]+作为名为“spring”的路径变量
    详情请参见最新的(截至目前)Spring Framework版本5Javadoc:AntPathMathcer

相关问题