• 专题——web.xml 中 url-pattern


    一、映射什么?

    一个请求发送到 servlet 容器,servlet 容器会将当前请求的 url 路径减去 协议、端口号、contextPath,剩下 servletPath 就是用来做 url-pattern 映射的部分。

    如:

    http://localhost:8080/myservlet/DisplayHeader?method=show

    http: 传输协议

    localhost: 主机地址

    8080: 端口号

    myservlet: contextPath

    DisplayHeader: servletPath

    method=show: 参数

    所以要做 url-pattern 映射的部分就是 "DisplayHeader" 部分。

    二、映射

    1.映射规则

    (1)精确匹配:在url-pattern标签中指定一个具体的URL地址,其中不使用任何的通配符,例如:/target.jsp

    (2)模糊匹配:在url-pattern标签中指定一个带有通配符的URL地址

      <1>前缀匹配:URL地址前面确定,后面使用通配符,例如:/happy/*

      <2>后缀匹配:URL地址后面确定,前面使用通配符,例如:*.jsp,*.jpg

      <3>注意:不能在URL地址中间使用通配符,例如:/happy/*.jsp是不允许的

    (3)还有一种:"/"

    2.Wrapper :Wrapper 代表一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。

    (1)前缀匹配的 servlet 会被丢到 wildcardWrappers 中。

    (2)后缀匹配的 servlet 会被丢到 extensionWrappers 中。

    (3)"/" 会被丢到 defaultWrapper 中。

    (4)其他映射被丢到 exactWrappers 中。

    3.优先级的高低

    (1)精确匹配,使用 contextVersion 的 exactWrappers

    (2)前缀匹配,使用 contextVersion 的 wildcardWrappers

    (3)后缀匹配,使用contextVersion的extensionWrappers(tomcat 自动为我们加入处理 .jsp 和 .jspx 路径)

    (4)使用资源文件来处理servlet,使用contextVersion的welcomeResources属性,这个属性是个字符串数组(servletPath 如果什么都不输入的话,则会先来映射welcomeResources)

    (5)使用默认的servlet,使用contextVersion的defaultWrapper

    简单来说:

    精确匹配的优先级>前缀匹配(/*)>后缀匹配(*.action)> servletPath 为空(默认会访问 welcomeResources) > "/"。

    三、参考资料

    http://www.cnblogs.com/fangjian0423/p/servletContainer-tomcat-urlPattern.html

    四、常见问题

    1.为什么 servlet 的 url-pattern 要配置为 "/",而 filter 的 url-pattern 要配置为 "/*"?

    "/*" 的优先级较高,对于大部分 url 请求都能进行过滤,甚至我们访问 index.jsp 这样的文件都需要走这个映射。对于 servlet 而言,不是希望看到的。

    对于 filter 来说,不会像servlet那样只匹配一个servlet,因为filter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一个filter,所以它要拦截绝大部分请求,然后由每个匹配的filter进行自主处理。

    这个解释可能还有点不足,欢迎大家补充。

  • 相关阅读:
    学习ActiveMQ(五):activemq的五种消息类型和三种监听器类型
    学习ActiveMQ(三):发布/订阅模式(topic)演示
    学习ActiveMQ(二):点对点(队列)模式消息演示
    Linux系统基础优化及常用命令
    【原创】Access自动编号的初始值设置及重置编号
    【整理】引用类型与ref传递实例精解
    【原创】数据库操作类库整理
    【摘录】Random快速产生相同随机数的原因及解决方案
    【整理】辗转相除法求最大公约数算法证明
    【转载】access采用sql语句与msql的区别
  • 原文地址:https://www.cnblogs.com/solverpeng/p/5729763.html
Copyright © 2020-2023  润新知