具有多个匹配项的 Servlet 映射
Servlet mapping with multiple matches
我有一个关于映射行为的问题。
如果给出了这些映射:
<servlet-mapping>
<servlet-name> ServletA </servlet-name>
<url-pattern> *.xml </url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name> ServletB </servlet-name>
<url-pattern> /result/* </url-pattern>
</servlet-mapping>
还有这个 HTTP 请求:
/result/example.xml
将映射哪个 servlet,为什么?
根据您的 <servlet-mapping>
配置,/result/example.xml
的请求将由 ServletB
处理,因为路径匹配总是胜过扩展名匹配。
之所以如此,是因为与针对特定目录及其后代的路径匹配相比,扩展匹配被认为是更宽松的(不是失败者,尽管它也适用:) 约束,因为它适用于整个站点,并且因此在本质上更具体。
匹配优先级是这样的:
- 精确路径匹配
- 通配符路径匹配(较长的匹配比较短的匹配)
- 扩展匹配
- 默认 servlet(仅配置
/
来处理所有 404)
我有一个关于映射行为的问题。
如果给出了这些映射:
<servlet-mapping>
<servlet-name> ServletA </servlet-name>
<url-pattern> *.xml </url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name> ServletB </servlet-name>
<url-pattern> /result/* </url-pattern>
</servlet-mapping>
还有这个 HTTP 请求:
/result/example.xml
将映射哪个 servlet,为什么?
根据您的 <servlet-mapping>
配置,/result/example.xml
的请求将由 ServletB
处理,因为路径匹配总是胜过扩展名匹配。
之所以如此,是因为与针对特定目录及其后代的路径匹配相比,扩展匹配被认为是更宽松的(不是失败者,尽管它也适用:) 约束,因为它适用于整个站点,并且因此在本质上更具体。
匹配优先级是这样的:
- 精确路径匹配
- 通配符路径匹配(较长的匹配比较短的匹配)
- 扩展匹配
- 默认 servlet(仅配置
/
来处理所有 404)