Spring MVC中的URL匹配规则

个人博客 www.ylhwan.com
URL匹配规则有如下几种:
(1)精准匹配
中的配置项必须与URL完全精确匹配

spring-dispatcher /ay /index.html /test/ay.html

当在浏览器中输入如下几种URL,都会被匹配到该Servlet,具体代码如下

   http://localhost/ay
    http://localhost/index.html    
    http://localhost/test/ay.html

(2)拓展名匹配
以"*"开头的字符串被用于拓展名匹配

   <servlet-mapping>
        <servlet-name>spring-dispatcher</servlet-name>
            <!-- 扩展名匹配 -->
        <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>

当在浏览器输入如下几种URL时,都会被匹配到该Servlet,具体代码如下:

 http://localhost/ay.jsp
    http://localhost/al.jsp

(3)路径匹配
以"/“字符开头,并”/*"结尾的字符串用于路径匹配

spring-dispatcher /ay/*

当在浏览器中输入如下几种URL时,都会被匹配到该Servlet,具体代码如下:

  http://localhost/ay/ay.jsp
    http://localhost/ay/ay.html
    http://localhost/ay/action
    http://localhost/ay/xxxx
    http://localhost/ay/xxxx.do

注:路径匹配和拓展名匹配无法同时设置,如果设置,启动tomcat服务器会报错。如下三种匹配规则是错误的:

  <url-pattern>/kata/*.jsp</url-pattern>
    <url-pattern>/*.jsp</url-pattern>
    <url-pattern>he*.jsp</url-pattern>

(4) 默认匹配

    <servlet-mapping>  
            <servlet-name>spring-dispatcher</ servlet-name><!-- 默认匹配所有请求 -- >
        <url-pattern>/</url-pattern>
    </servlet-mapping>
(5)匹配顺序

当一个URL与多个Servlet的匹配规则可以匹配,则按照"精准路径>最长路径>扩展名"这样的优先级匹配到对应的Servlet。
例:

  • 比如ServletA的url-pattern为/test, ServletB 的url-pattern为/*,如果访问的URL路径为http://localhost/test,容器会优先进行精确路径匹配,发现/test正好被ServletA精确匹配,那么就会去调用ServletA,而不是ServletB。

  • 比如ServletA的url-pattern为/test/,而ServletB的url- pattern为/test/a/,如果访问的URL路径为http://localhosvtest/a,容器会选择路径最长的Servlet来匹配,也就是ServletB。

  • 比如ServletA的url-pattern: * action,ServletB 的url-patterm为/*。如果访问的URL路径为htp://localhost/test.action,容器会优先进行路径匹配,而不是扩展名匹配,这样就去调用ServletB。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值