两个规则匹配时的web.xml和@WebServlet优先级(根据Servlet 3.0规范)

时间:2016-09-25 08:44:58

标签: java servlets java-ee servlet-3.0

让我们假设web.xml有一个规则

<servlet-mapping>
        <servlet-name>One</servlet-name>
        <url-pattern>/something/e*</url-pattern>
</servlet-mapping>

虽然类Two.class有一个注释:

@WebServlet(name = "Two", urlPatterns = {"/something/er*"})

从Servlet 3.0规范

8.2.3。 (第4点)。 The web.xml of the web application has the highest precedence when resolving conflicts between the web.xml, web-fragment.xml and annotations.

虽然相同的规范12.1说The Web application selected must have the longest context path that matches the start of the request URL

因此,如果我理解正确,12.1规则意味着请求/something/error将调用servlet 2?规则12.1优先于规则8.2.3第4点(web.xml和注释之间没有检测到冲突)?

我说得对吗?或者根据8.2.3第4点这是冲突吗?

1 个答案:

答案 0 :(得分:0)

12.1中的Spec正在讨论Web模块的上下文路径。 servlet容器使用它来基本知道要使用的.war。在这种情况下&#34;某事&#34;不是上下文路径(或不应该)。

也在12.1:

  

用于映射到servlet的路径是请求对象中的请求URL减去上下文路径和路径参数。

因此,您对12.1的引用不会影响8.2.3,优先顺序如您所引用的那样:

  
    

在解决web.xml,web-fragment.xml和注释之间的冲突时,Web应用程序的web.xml具有最高优先级。

  

在您的示例中,如果请求转到host,将调用servlet One:port / contextPath / something / error