servlet路径映射规范(备忘)

本文详细解释了Web容器如何根据URL路径确定处理客户端请求的Servlet。涵盖了精确匹配、最长路径前缀匹配、扩展名匹配及默认Servlet的选择。此外还介绍了在web应用部署描述符中的映射规范。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、使用 URL 路径

在收到客户端请求时, web 容器确定转发到哪一个 Web 应用。选择的 Web 应用必须具有最长的上下文路径
匹配请求 URL 的开始。当映射到 Servlet 时, URL 匹配的一部分是上下文。
Web 容器接下来必须用下面描述的路径匹配步骤找出 servlet 来处理请求。
用于映射到 Servlet 的路径是请求对象的请求 URL 减去上下文和路径参数部分。下面的 URL 路径映射规则
按顺序使用。使用第一个匹配成功的且不会进一步尝试匹配:
1. 容器将尝试找到一个请求路径到 servlet 路径的精确匹配。成功匹配则选择该 servlet。
2. 容器将递归地尝试匹配最长路径前缀。这是通过一次一个目录的遍历路径树完成的,使用‘ /’字符作为
路径分隔符。最长匹配确定选择的 servlet。
3. 如果 URL 最后一部分包含一个扩展名(如 .jsp), servlet 容器将视图匹配为扩展名处理请求的 Servlet。
扩展名定义在最后一部分的最后一个‘ .’字符之后。
4. 如果前三个规则都没有产生一个 servlet 匹配,容器将试图为请求资源提供相关的内容。如果应用中定义
了一个“ default” servlet,它将被使用。许多容器提供了一种隐式的 default servlet 用于提供内容。
容器必须使用区分大小写字符串比较匹配。


二、映射规范

在 web 应用部署描述符中,以下语法用于定义映射:
1. 以‘ /’字符开始、以‘ /*’后缀结尾的字符串用于路径匹配。
2. 以‘ *.’开始的字符串用于扩展名映射。
3. 空字符串“”是一个特殊的 URL 模式, 其精确映射到应用的上下文根,即,

http://host:port/<context-root>/

请求形式。在这种情况下,路径信息是‘ /’且 servlet 路径和上下文路径是空字符串(“”)
4. 只包含“ /”字符的字符串表示应用的“ default” servlet。在这种情况下, servlet 路径是请求 URL 减去上下文路径且路径信息是 null。
5. 所以其他字符串仅用于精确匹配。


如果一个有效的 web.xml(在从 fragment 和注解合并了信息后)包含任意的 url-pattern,其映射到多个servlet,那么部署将失败。

# 放点私货,各位看官注意了:上述所说url-pattern设置为”“(空串)时精确映射到应用的上下文根,设置为’ / ‘表示default servlet针对的是servlet,所以当设置filter的url-pattern时不能设置为”“(空串)或’ / ‘,不然filter可能配置无效(tomcat8.0亲测无效),所以如果你配置了一个filter但是发现没有起作用,那就应该看下filter的url-pattern是否配置错了,一般情况下把filter的url-pattern配置为如下,过滤所有请求,是最保险的。
<url-pattern>/*</url-pattern>

原创不易,转帖请注明出处 — shizhongqi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值