我在我的 xml 中看到了一些 url 模式,例如,在 filter-mapping、intercept-url、mvc:resources 等中。这些模式总是相同的吗?这些 URL 模式/
, /*
,之间有什么区别/**
?
问问题
3249 次
1 回答
7
这取决于您在哪种情况下提出这个问题:
- Servlet/过滤器映射
- Spring Security 映射
Servlet/过滤器映射
在 Web 应用程序部署描述符中,使用以下语法来定义映射:
- 以“/”字符开头并以“/*”后缀结尾的字符串用于路径映射。
- 以“*”开头的字符串。前缀用作扩展映射。
- 空字符串 ("") 是一种特殊的 URL 模式,它精确地映射到应用程序的上下文根,即表单的请求
http://host:port/<contextroot>/
。在这种情况下,路径信息是“/”,servlet 路径和上下文路径是空字符串(“”)。- 仅包含“/”字符的字符串表示应用程序的“默认”servlet。在这种情况下,servlet 路径是请求 URI 减去上下文路径,并且路径信息为空。
- 所有其他字符串仅用于完全匹配
这来自Servlet 规范(JSR 315)(第 12.2 节)。
在 Servlet/Filter 映射场景中/
意味着“默认”servlet,通常这是DefaultServlet
(在 Tomcat 中)映射到的位置。基本上它处理所有传入的请求,并且不会将它们传递到链的更下游进行处理(基本上这是最后一个捕获所有映射)。
/*
在 servlet 映射场景中是指所有传入的 URL(当它不能被处理时,它将被传递给 last-catch-all-mapping)。
Spring Security 映射
现在在谈论Spring时/
,/*
和/**
具有不同的含义。它们指的是所谓的 Ant 风格的路径表达式。
where/
仅表示 / (应用程序的根),where/*
表示包含一层深度的根, where/**
表示所有内容。
所以/foo/*
将匹配一个 URL ,/foo/bar
但不会匹配/foo/bar/baz
。而/**
or/foo/**
将匹配所有这些。
于 2013-09-18T07:03:35.380 回答