Servlet url-pattern的匹配规则

本文详细介绍了Servlet中URL-Pattern的五种匹配规则:精确匹配、通配符匹配、通配符路径匹配、后缀匹配及任意URL匹配,并解释了它们的优先级顺序和Web服务器对请求地址的具体处理流程。
Servlet url-pattern的匹配规则

1.精确匹配


资源路径必须一致才能匹配成功
<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/a.html</url-pattern>
</servlet-mapping>
浏览器输入: http://localhost:8080/a.html 匹配成功

<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/b</url-pattern>
</servlet-mapping>
浏览器输入: http://localhost:8080/b 匹配成功 

<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/a/test.html</url-pattern>
</servlet-mapping>
浏览器输入: http://localhost:8080/a/test.html 匹配成功


2.通配符匹配

使用*来匹配0个或多个字符
<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

代表输入任何不同的资源路径地址都能匹配成功
浏览器输入: http://localhost:8080/a/b/c 匹配成功
浏览器输入: http://localhost:8080/test.html 匹配成功

3.通配符路径匹配

<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/a/*</url-pattern>
</servlet-mapping>
代表输入任何以 a 路径开头的资源路径地址都能匹配成功
浏览器输入: http://localhost:8080/a/test 匹配成功
浏览器输入: http://localhost:8080/a/abc/xyz 匹配成功
浏览器输入: http://localhost:8080/a/a.html 匹配成功

4.后缀匹配

使用*.xx结尾,表示资源路径以任意多个字符开头并以.xx结尾就能匹配成功
<servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
浏览器输入: http://localhost:8080/xxx.do 匹配成功
浏览器输入: http://localhost:8080/a/a.do 匹配成功

<servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>*.jsp</url-pattern>
</servlet-mapping>
浏览器输入: http://localhost:8080/xxx.jsp 匹配成功
浏览器输入: http://localhost:8080test/abc.jsp 匹配成功


5.匹配任意的url

当以上方式匹配规则都没有匹配成功时。
<servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
<!--当url-pattern配置成/*的时候,Tomcat会将所有没匹配成功的请求交给对应的Servlet进行处理-->

<servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<!--当url-pattern配置成/的时候,多数情况下与/*效果一致,但是,当访问的路径正好对应jsp文件时,Tomcat会访问的是jsp文件而不是把请求交给对应的Servlet处理-->


注:

<url-pattern>资源路径 要么只能以/开头,要么只能以*开头。

<url-pattern>/app/*.jsp</url-pattern> 不正确
<url-pattern>/*.jsp</url-pattern> 不正确
<url-pattern>he*.jsp</url-pattern>不正确
<url-pattern>/aa/*/bb</url-pattern> 是精确匹配,url必须是 /aa/*/bb,*已不代表通配的含义。


匹配优先级:

精确匹配>通配符匹配>后缀匹配>任意匹配
注:如果都没有匹配,则进入 web容器查找静态资源,返回静态资源。如果web容器也找不到资源则返回404。

Web服务器对请求地址的处理过程:

首先到当前web应用的web容器下的web.xml文件查找是否有匹配的url-pattern资源路径,有则交由 url-pattern对应的servlet-name的 Servlet处理该请求并响应给浏览器,没有则交给tomcat的内置的DefaultServlet处理,DefaultServlet程序到web容器的根目录下查找是否存在一个名称为xxx.html的静态文件,如果找到该文件,则读取该文件内容,返回给浏览器,如果找不到该文件,则返回404错误页面。

注:先找动态资源,再找静态资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值