url-pattern详解
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。
- 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详解相关推荐
- 设计模式 - 抽象工厂模式(abstract factory pattern) 详解
抽象工厂模式(abstract factory pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/270916 ...
- java pattern详解_JAVA正则表达式:Pattern类与Matcher类详解
以下我们就分别来看看这两个类: 一.捕获组的概念 捕获组可以通过从左到右计算其开括号来编号,编号是从1 开始的.例如,在表达式 ((A)(B(C)))中,存在四个这样的组: 1 ((A) ...
- Domino URL Command 详解
第一章 概述 1.1. Domino URL命令语法 http://Host/DominoObject?Action&Arguments Host:DNS或IP DominoObject:一个 ...
- php 新浪url,PHP URL函数详解
php url函数: parse_url() parse_url (PHP 3, PHP 4, PHP 5) parse_url -- 解析 URL,归来其构成局部 解释 array parse_ur ...
- mysql+url的配置参数详解_MySql链接url参数详解
mysql URL格式如下:jdbc:mysql://[host:port],[host:port].../[database][?参数名1][=参数值1][&参数名2][=参数值2]... ...
- 百度搜索结果页url参数详解
在百度首页输入任意关键词搜索之后,我们跳转到搜索结果页面,在浏览器的网址栏我们可以看到很长的一串url地址.那么,你真的了解这一串url的含义吗? s?:搜索 百度搜索结果页使用了重定向,因此我们看到 ...
- log4j2 pattern详解
版权声明:本文为博主http://blog.csdn.net/zhu19774279原创文章,未经博主允许不得转载. https://blog.csdn.net/zhu19774279/article ...
- DJANGO 页面跳转 URL 使用详解( URL 跳转到指定页面)
url.py: from django.urls import path from myblog import views urlpatterns = [ path('', views.index), ...
- 百度url 参数详解全
百度url解析Joe.Smith整理大全 百度url解析Joe.Smith整理大全...1 本文链接:http://blog.csdn.net/qq_26816591/article/details/ ...
- python url解码详解
python url解码 url是数据的一个部分,一般会用来做什么呢?比如网站的 URL,比如搜索引擎中的 url,再比如网页中的图片等. 你也许不知道,在 Web页面中的图片.链接.超链接都是 UR ...
最新文章
- 【ACM】UVa 1339
- ESXi 功能 (看到的觉得有用就发出来了)
- WinSock重叠I/O模型
- 每周分享之cookie详解
- LeetCode 1380. 矩阵中的幸运数(set)
- CTF-Crypto密码学
- Linux:C GNU Obstack内存池
- 哪些异常是RuntimeException?Sql异常属于RuntimeException吗?Spring下SQL异常事务回滚
- 描述最常用的5种http方法的用途_RESTful API系列之HTTP基础
- python元组及文件
- python新手图解_Python完全新手教程
- Julia: 带汉字的CSV文件的处理
- 杭电ACM2000题
- [黑苹果]G480 黑苹果之路
- 专访 | 为什么中国还没有区块链科技巨头和顶级公链?
- 详解浮点数的精度问题
- [维修笔记]关于红米2A手机无限重启的维修
- 编译程序和解释程序有什么区别?
- ratel平头哥电脑感染app
- 次日即流失?直播App如何运营超级用户?