zoukankan      html  css  js  c++  java
  • Web.xml中设置Servlet和Filter时的url-pattern匹配规则

    
    一、servlet容器对url的匹配过程:
    
    当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test/aaa.html(我的应用上下文是test),容器会将http://localhost/tes去掉,将剩下的/aaa.html部分拿来做servlet的映射匹配,也就是拿这剩下的部分与web.xml中配置的servlet的url-pattern进行匹配。注意:这个映射匹配过程是有一定的规则的,而且每次匹配最终都只匹配一个 servlet。(这一点和filter不同)
    
     
    
    匹配规则如下:(它的匹配原则就是:找到唯一一个最适合的Servlet)
    
    1. 精确路径匹配。
    
    例子:比如servletA的url-pattern为 /test,servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test ,这个时候容器就会先 进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,也不会去理会其他的servlet了。
    
     
    
    2. 最长路径匹配。
    
    例子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此时访问http://localhost/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。
    
     
    
    3. 扩展匹配。
    
    如果url最后一段包含扩展,容器将会根据扩展选择合适的servlet。例子:servletA的url-pattern:*.action(/test/*.action为不合法的url-pattern)
    
     
    
    4. 如果前面三条规则都没有找到一个servlet,容器会根据url选择对应的请求资源。如果应用定义了一个default servlet,则容器会将请求丢给default servlet(什么是default servlet?后面会讲)。
    
     
    
     
    
    对于filter,不会像servlet那样只匹配一个servlet,因为filter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一个filter。Filter的处理顺序和filter-mapping在web.xml中定义的顺序相同。
    
     
    
    二、url-pattern详解
    
    在web.xml文件中,以下语法用于定义映射:
    
    ① 以”/’开头和以”/*”结尾的是用来做路径映射的。
    
    ② 以前缀”*.”开头的是用来做扩展映射的。
    
    ③ “/” 是用来定义default servlet映射的。
    
    ④ 剩下的都是用来定义详细映射的。比如: /aa/bb/cc.action
    
    所以,为什么定义”/*.action”这样一个看起来很正常的匹配会错?因为这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断。

    一般做全匹配时,servlet的url-pattern 为 / 。filter的url-pattern 为 /* 。



    此文章转载自:http://www.cnblogs.com/kevin-yuan/archive/2012/12/24/2831333.html
  • 相关阅读:
    Spring MVC 核心组件详解
    Spring MVC 入门就这一篇
    Spring 事务解决方案
    【UGUI源码分析】Unity遮罩之Mask详细解读
    游戏开发中不同时区下的时间问题
    ARTS第十三周(阅读Tomcat源码)
    Win10 电脑安装.NET低版本提示“这台计算机中已经安装了 .NET Framwork 4.6.2或版本更高的更新”问题
    Dynamics 365 Setup 提示SqlServer 存在
    Dynamics CRM "Verification of prerequisites for Domain Controller promotion failed. Certificate Server is installed."
    Dynamics CRM
  • 原文地址:https://www.cnblogs.com/wwzyy/p/5881121.html
Copyright © 2011-2022 走看看