如果我在 web 中有两个与请求匹配的 servlet 映射.xml会发生什么



如果我在web中有两个与请求匹配的servlet映射.xml会发生什么情况?它是否选择最具体?

例如,如果我有以下 xml 并且请求来到 ..../something,而它转到 somethingservlet 或 everything_else servlet?

   <servlet-mapping>
      <servlet-name>something</servlet-name>
      <url-pattern>/something</url-pattern>
  </servlet-mapping>    
  <servlet-mapping>
    <servlet-name>everything_else</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
将使用

第一个成功的匹配。

Servlet 容器有一定的映射规则。阅读 Servlet 2.5 规范章节 SRV.11:

用于映射到 servlet 的路径是来自请求的请求 URL 对象减去上下文路径和路径参数。网址路径映射 以下规则按顺序使用。使用第一个成功的匹配,不再使用 尝试的比赛:

  1. 容器将尝试找到请求路径与 servlet 路径的完全匹配。成功的匹配将选择 奴仆。
  2. 容器将递归尝试匹配最长的路径前缀。这是完成的 通过逐个目录的路径树,使用"/"字符作为 路径分隔符。最长的匹配确定所选的 servlet。
  3. 如果 URL 路径中的最后一个段包含扩展名(例如 .jsp),则 servlet 容器将尝试匹配处理扩展请求的 Servlet。 扩展名定义为最后一个"."字符之后的最后一段的一部分。
  4. 如果前三个规则都没有导致 servlet 匹配,则容器将 尝试提供适合所请求资源的内容。如果是"默认" servlet 是为应用程序定义的,它将被使用。

最新更新