让我们假设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点这是冲突吗?
答案 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