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/**
在<url-pattern>
中有效吗?
附带说明,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*:区别和实际应用