Servlet基础之URL匹配规则

本文详细解释了servlet容器中的URL匹配规则,包括精确匹配、路径匹配、扩展名匹配和缺省匹配,以及注意事项,强调了规则的特定性及使用时的常见误区。

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

URL 匹配规则

几个容易混淆的规则

  • servlet 容器中的匹配规则既不是简单的通配,也不是正则表达式,而是特定的规则。所以不要用通配符或者正则表达式的匹配规则来看待 servlet 的 “url-pattern” 。

  • Servlet 2.5 开始,一个 servlet 可以使用多个 url-pattern 规则,“<servlet-mapping>” 标签声明了与该 servlet 相应的匹配规则,每个 “<url-pattern>” 标签代表 1 个匹配规则;

  • 当 servlet 容器接收到浏览器发起的一个 url 请求后,容器会用 url 减去当前应用的上下文路径,以剩余的字符串作为 servlet 映射,假如 url 是 http://localhost:8080/appDemo/index.html,其应用上下文是 appDemo,容器会将 http://localhost:8080/appDemo 去掉,用剩下的 “/index.html” 部分拿来做 servlet 的映射匹配

  • url-pattern 映射匹配过程是"有优先顺序"的,而且当有一个 servlet 匹配成功以后,就不会去理会剩下的 servlet 了。

精确匹配

精确匹配是优先级最高,最不会产生歧义的匹配。

<servlet-mapping>
  <servlet-name>...</servlet-name>
  <url-pattern>/user/users.html</url-pattern>
  <url-pattern>/index.html</url-pattern>
  <url-pattern>/user/addUser.action</url-pattern>
</servlet-mapping>

当在浏览器中输入如下几种 url 时,都会被匹配到该 servlet

http://localhost:8080/appDemo/user/users.html
http://localhost:8080/appDemo/index.html
http://localhost:8080/appDemo/user/addUser.action

注意
http://localhost:8080/appDemo/user/addUser/(最后有斜杠符)是非法的 url!

它不会被当作 http://localhost:8081/appDemo/user/addUser(最后没有斜杠府)识别。

另外上述 url 后面可以跟任意的查询条件,都会被匹配,如

http://localhost:8080/appDemo/user/addUser?username=Tom&age=23 会被匹配。

路径匹配

路径匹配的优先级仅次于精确匹配。

以 “/” 字符开头,并以 “/*” 结尾的字符串都表示是路径匹配。

<servlet-mapping>
    <servlet-name>...</servlet-name>
    <url-pattern>/user/*</url-pattern>
</servlet-mapping>

上述规则表示 URL 以 “/user” 开始,后面的路径可以任意。比如下面的 url 都会被匹配。

http://localhost:8080/appDemo/user/users.html
http://localhost:8080/appDemo/user/addUser.action
http://localhost:8080/appDemo/user/updateUser.do

扩展名匹配

也叫 后缀匹配

以 “*.” 开头的字符串被用于扩展名匹配

<servlet-mapping>
    <servlet-name>...</servlet-name>
    <url-pattern>*.jsp</url-pattern>
    <url-pattern>*.action</url-pattern>
</servlet-mapping>

则任何扩展名为 jsp 或 action 的 url 请求都会匹配,比如下面的 url 都会被匹配

http://localhost:8080/appDemo/user/users.jsp
http://localhost:8080/appDemo/toHome.action

缺省匹配

缺省匹配也是「兜底」的匹配,一个 url 不符合精确匹配、路径匹配、扩展品匹配的任何一种情况,那么它所触发的 Servlet 就是由缺省匹配决定。

<servlet-mapping>
    <servlet-name>...</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

注意事项 1:匹配规则不能混用

匹配规则不是正则表达式规则,不要想当然的使用通配符:精确匹配、路径匹配、后缀匹配 三者 不能混用

  • 要么以 / 开头,并以 /* 结尾,表示路径匹配。

  • 要么以 *. 开头,表示后缀匹配。

  • 要么就是精确匹配。

例如:

  • <url-pattern>/user/*.action</url-pattern> 是非法的

另外:

  • <url-pattern>/aa/*/bb</url-pattern> 是合法的。是精确匹配,合法,

注意事项 2:“/*” 和 “/” 含义并不相同

“/*” 属于路径匹配,“/” 属于 default 匹配。“.jsp” 的访问(JSP Servlet)的优先级刚好『卡』在它们俩的中间!

“/*” 会拦截你对 .jsp 页面的访问,“/” 则不会。很多 404 错误均由此引起。

注意
除非是真的需要,否则不要使用 “/*” !

从效果上看,“/*” 和 “/” 均会拦截对静态资源的访问请求,需要特别注意。

为了在Windows安装ADB工具,你可以按照以下步骤进行操作: 1. 首先,下载ADB工具包并解压缩到你自定义的安装目录。你可以选择将其解压缩到任何你喜欢的位置。 2. 打开运行窗口,可以通过按下Win+R键来快速打开。在运行窗口中输入"sysdm.cpl"并按下回车键。 3. 在系统属性窗口中,选择"高级"选项卡,然后点击"环境变量"按钮。 4. 在环境变量窗口中,选择"系统变量"部分,并找到名为"Path"的变量。点击"编辑"按钮。 5. 在编辑环境变量窗口中,点击"新建"按钮,并将ADB工具的安装路径添加到新建的路径中。确保路径正确无误后,点击"确定"按钮。 6. 返回到桌面,打开命令提示符窗口。你可以通过按下Win+R键,然后输入"cmd"并按下回车键来快速打开命令提示符窗口。 7. 在命令提示符窗口中,输入"adb version"命令来验证ADB工具是否成功安装。如果显示版本信息,则表示安装成功。 这样,你就成功在Windows安装ADB工具。你可以使用ADB工具来执行各种操作,如枚举设备、进入/退出ADB终端、文件传输、运行命令、查看系统日志等。具体的操作方法可以参考ADB工具的官方文档或其他相关教程。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [windows环境安装adb驱动](https://blog.csdn.net/zx54633089/article/details/128533343)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Windows安装使用ADB简单易懂教程](https://blog.csdn.net/m0_37777700/article/details/129836351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值