Servlet和filter是J2EE开发中常用的技术,使用方便,配置简单。servlet和filter中的url-pattern有一些文章在里 面的,总结了一些东西,以免遇到问题又要浪费时间。

一. servlet容器对url的匹配过程:

当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是 http://localhost/test/aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉, 剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下 的servlet了(filter不同,后文会提到)。其匹配规则和顺序如下:

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

4.     如果前面三条规则都没有找到一个servlet,容器会根据url选择对应的请求资源。如果应用定义了一个default servlet,则容器会将请求丢给default servlet(什么是default servlet?后面会讲)。

根据这个规则表,就能很清楚的知道servlet的匹配过程,所以定义servlet的时候也要考虑url-pattern的写法,以免出错

对于filter,不会像servlet那样只匹配一个servlet,因为filter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一 个filter。Filter的处理顺序和filter-mapping在web.xml中定义的顺序相同。

二. url-pattern详解

在web.xml文件中,以下语法用于定义映射:

l 以”/’开头和以”/*”结尾的是用来做路径映射的。

l 以前缀”*.”开头的是用来做扩展映射的。

l “/” 是用来定义default servlet映射的。

l 剩下的都是用来定义详细映射的。比如: /aa/bb/cc.action

所以,为什么定义”/*.action”这样一个看起来很正常的匹配会错?因为这个匹配即属于路径映射, 也属于扩展映射,导致容器无法判断。

有一些参数可以控制DefaultServlet的行为。此外,当请求的URL是/的时候, 也就是没有匹配的时候,就会触发这个DefaultServlet。

Java代码  
  1. The default resource-serving servlet for most web applications, used to serve static resources such as HTML pages and images.

静态资源都走这个DefaultServlet~

<url-pattern>/</url-pattern>  会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url
<url-pattern>/*</url-pattern> 会匹配所有url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等)

url-pattern详解相关推荐

  1. 设计模式 - 抽象工厂模式(abstract factory pattern) 详解

    抽象工厂模式(abstract factory pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/270916 ...

  2. java pattern详解_JAVA正则表达式:Pattern类与Matcher类详解

    以下我们就分别来看看这两个类: 一.捕获组的概念 捕获组可以通过从左到右计算其开括号来编号,编号是从1 开始的.例如,在表达式 ((A)(B(C)))中,存在四个这样的组: 1        ((A) ...

  3. Domino URL Command 详解

    第一章 概述 1.1. Domino URL命令语法 http://Host/DominoObject?Action&Arguments Host:DNS或IP DominoObject:一个 ...

  4. php 新浪url,PHP URL函数详解

    php url函数: parse_url() parse_url (PHP 3, PHP 4, PHP 5) parse_url -- 解析 URL,归来其构成局部 解释 array parse_ur ...

  5. mysql+url的配置参数详解_MySql链接url参数详解

    mysql URL格式如下:jdbc:mysql://[host:port],[host:port].../[database][?参数名1][=参数值1][&参数名2][=参数值2]... ...

  6. 百度搜索结果页url参数详解

    在百度首页输入任意关键词搜索之后,我们跳转到搜索结果页面,在浏览器的网址栏我们可以看到很长的一串url地址.那么,你真的了解这一串url的含义吗? s?:搜索 百度搜索结果页使用了重定向,因此我们看到 ...

  7. log4j2 pattern详解

    版权声明:本文为博主http://blog.csdn.net/zhu19774279原创文章,未经博主允许不得转载. https://blog.csdn.net/zhu19774279/article ...

  8. DJANGO 页面跳转 URL 使用详解( URL 跳转到指定页面)

    url.py: from django.urls import path from myblog import views urlpatterns = [ path('', views.index), ...

  9. 百度url 参数详解全

    百度url解析Joe.Smith整理大全 百度url解析Joe.Smith整理大全...1 本文链接:http://blog.csdn.net/qq_26816591/article/details/ ...

  10. python url解码详解

    python url解码 url是数据的一个部分,一般会用来做什么呢?比如网站的 URL,比如搜索引擎中的 url,再比如网页中的图片等. 你也许不知道,在 Web页面中的图片.链接.超链接都是 UR ...

最新文章

  1. 【ACM】UVa 1339
  2. ESXi 功能 (看到的觉得有用就发出来了)
  3. WinSock重叠I/O模型
  4. 每周分享之cookie详解
  5. LeetCode 1380. 矩阵中的幸运数(set)
  6. CTF-Crypto密码学
  7. Linux:C GNU Obstack内存池
  8. 哪些异常是RuntimeException?Sql异常属于RuntimeException吗?Spring下SQL异常事务回滚
  9. 描述最常用的5种http方法的用途_RESTful API系列之HTTP基础
  10. python元组及文件
  11. python新手图解_Python完全新手教程
  12. Julia: 带汉字的CSV文件的处理
  13. 杭电ACM2000题
  14. [黑苹果]G480 黑苹果之路
  15. 专访 | 为什么中国还没有区块链科技巨头和顶级公链?
  16. 详解浮点数的精度问题
  17. [维修笔记]关于红米2A手机无限重启的维修
  18. 编译程序和解释程序有什么区别?
  19. ratel平头哥电脑感染app
  20. 次日即流失?直播App如何运营超级用户?

热门文章

  1. i.MX 8M Mini——四核Cortex-A53+Cortex-M4多核CPU如何实现工控
  2. 通信用多模光纤主要有哪些类型?OM1~OM5有什么区别
  3. Excel从详细地址中批量提取分列出省、市、县区
  4. 机器学习算法:随机森林
  5. 雷天大壯 (易經大意 韓長庚)
  6. SHEIN:中国企业全球化正确之路
  7. 东莞的python培训机构
  8. 2020年全球物联网市场规模将达1.9万亿美元
  9. 5G市场手机行业的弯道超车,看看这次谁跑到了前面?
  10. 代码冲突的产生以及解决方式