1

我在我的 xml 中看到了一些 url 模式,例如,在 filter-mapping、intercept-url、mvc:resources 等中。这些模式总是相同的吗?这些 URL 模式/, /*,之间有什么区别/**

4

1 回答 1

7

这取决于您在哪种情况下提出这个问题:

  1. Servlet/过滤器映射
  2. 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 回答