Spring:关于路径的 /** 和 /* 的区别

Posted

技术标签:

【中文标题】Spring:关于路径的 /** 和 /* 的区别【英文标题】:Spring: Difference of /** and /* with regards to paths 【发布时间】: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/**,终于成功了。我的问题是……为什么?

【问题讨论】:

您确定/resources/**&lt;url-pattern&gt; 中有效吗? 附带说明,org.springframework.js.resource.ResourceServlet 已弃用。来自Spring Web Flow Reference Guide:“请注意,从版本 3.0.4 开始,Spring 框架包括 ResourceServlet 的替代品(请参阅Spring Framework documentation)。” 【参考方案1】:

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

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

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

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

【讨论】:

* 是否可以匹配 ** 不能匹配的内容? 请注意,Springs 的 AntPathMatcher 包含错误:它不完全符合 Ant 模式样式。示例:**/*.css 不适用于以 / 开头的路径,但它应该符合 Ant 样式约定。

以上是关于Spring:关于路径的 /** 和 /* 的区别的主要内容,如果未能解决你的问题,请参考以下文章

spring classpath:和classpath*:区别和实际应用

spring配置中classpath: 与classpath*:的区别

关于Spring

下面关于spring和struts的描述

关于@Autowired和@Resource注解区别

Spring配置文件中的“ classpath:“与“ classpath*:“的区别