[英]Mapping cases in web.xml
在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>
部署描述符中可以有多个servlet-mapping
。 Java Servlet规范第12章描述了选择映射的规则。将请求映射到Servlet:
12.1 URL路径的使用
...
用于映射到servlet的路径是来自请求对象的请求URL减去上下文路径和路径参数。 以下URL路径映射规则按顺序使用。 使用第一个成功的匹配,不尝试其他匹配:
- 容器将尝试查找请求路径与Servlet路径的精确匹配。 成功匹配将选择servlet。
- 容器将递归地尝试匹配最长的路径前缀。 这是通过使用“ /”字符作为路径分隔符,一次将路径树下移到一个目录来完成的。 最长的匹配确定所选的servlet。
- 如果URL路径中的最后一段包含扩展名(例如.jsp),则servlet容器将尝试匹配处理该扩展名请求的servlet。 扩展名定义为最后一个段之后的最后一个段的一部分。 字符。
- 如果前三个规则均未导致servlet匹配,则容器将尝试提供适合于所请求资源的内容。 如果为应用程序定义了“默认” servlet,则将使用它。 许多容器提供了隐式默认servlet来提供内容。
因此,这意味着,如果您具有完全匹配的内容,例如<url-pattern>/tar</url-pattern>
,则将选择此映射。 否则,将使用第二个不太具体的映射(例如<url-pattern>/*</url-pattern>
)。
但是您不能使用<url-pattern>/tar*</url-pattern>
创建映射,因为仅在/*
末尾/*
的开头允许使用星号*.
模式的格式(注意星号前的斜杠/
以及句点.
之后)。 有关完整详细信息,请参见第12.2节“映射规范”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.