在web.xml中映射案例

时间:2015-05-31 20:05:39

标签: java xml web-applications web.xml url-mapping

web.xml中,是否可以使用主映射和第二映射与不同于第一个映射的映射一起使用,如下所示?

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>ErrorHandler</servlet-name>
    <url-pattern>/?</url-pattern>
</servlet-mapping>

1 个答案:

答案 0 :(得分:1)

部署描述符中可以有多个servlet-mapping。有关选择映射的规则,请参阅Java Servlet Specification第12章映射对Servlet的请求:

  

12.1使用URL路径
  ...
  用于映射到servlet的路径是来自请求对象的请求URL减去上下文路径和路径参数。下面的URL路径映射规则按顺序使用。第一次成功匹配使用,未尝试进一步匹配:

     
      
  1. 容器将尝试查找请求路径与servlet路径的完全匹配。成功匹配选择servlet。
  2.   
  3. 容器将递归尝试匹配最长的路径前缀。这是通过使用'/'字符作为路径分隔符一次单击目录的路径树来完成的。最长的匹配决定了所选的servlet。
  4.   
  5. 如果URL路径中的最后一个段包含扩展名(例如.jsp),则servlet容器将尝试匹配处理扩展请求的servlet。扩展名被定义为最后一个'。'字符后的最后一个段的一部分。
  6.   
  7. 如果前三个规则都没有导致servlet匹配,则容器将尝试提供适合所请求资源的内容。如果为应用程序定义了“默认”servlet,则将使用它。许多容器提供了用于提供内容的隐式默认servlet。
  8.   

所以这意味着,如果您有完全匹配的<url-pattern>/tar</url-pattern>,则会选择此映射。否则,将使用第二个不太具体的映射(例如<url-pattern>/*</url-pattern>)。

无法创建<url-pattern>/tar*</url-pattern>的映射,因为只允许在模式的末尾/*或开头*.使用星号(请注意之前的斜杠/和星号后的句点.。有关详细信息,请参见第12.2节“映射规范”。