【问题标题】:Spring: Difference of /** and /* with regards to pathsSpring:关于路径的 /** 和 /* 的区别
【发布时间】:2012-09-16 03:57:59
【问题描述】:

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

之前我正在调试我的 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/**,终于成功了。我的问题是……为什么?

【问题讨论】:

标签: spring web resources url-pattern


【解决方案1】:

这是Apache ant中使用的路径模式,spring团队实现了它并在整个框架中使用它。

参考见AntPathMatcher的javadoc(newestjavadoc好像有问题,所以我链接一个旧的)。

回到你的问题,根据文档,它只有3条规则:

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

【讨论】:

  • * 是否可以匹配 ** 不能匹配的内容?
  • 请注意,Springs 的 AntPathMatcher 包含错误:它不完全符合 Ant 模式样式。示例:**/*.css 不适用于以 / 开头的路径,但它应该符合 Ant 样式约定。
猜你喜欢
  • 2019-12-14
  • 2011-03-18
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 2018-11-02
  • 2011-03-17
  • 1970-01-01
  • 2014-02-13
相关资源
最近更新 更多