Spring:关于路径的/**和/*的差异

mpm*_*pmp 75 resources spring url-pattern web

当我们提到路径时,两个星号而不是一个星号之间的区别是什么?

之前我正在调试我的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>
Run Code Online (Sandbox Code Playgroud)

但不幸的是我收到了这个错误:

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

我发现它真的很奇怪,因为images文件夹中的所有图像都被访问了但是我的.swf怎么会受到"保护"?

后来,我决定改变/resources/*/resources/**最后和它的工作.我的问题是......为什么?

Ran*_*Lin 41

这是一个用于的路径模式Apache ant,Spring团队实现它并在整个框架中使用它.

作为参考,请参阅AntPathMatcher的 javadoc (最新的 javadoc似乎有问题,所以我链接一个旧的).

回到你的问题,根据该文件,它只有3个规则:

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

  • 请注意,Springs的AntPathMatcher包含错误:它不完全符合Ant模式样式.示例:`**/*.css`对于以`/`开头的路径不起作用,而它应该根据Ant样式约定. (3认同)
  • `*` 是否有可能匹配 `**` 不能匹配的内容? (2认同)