servlet的url-pattern匹配规则

article/2025/10/2 18:39:01

 目录

1 url-pattern匹配规则说明

2 四种匹配规则优先顺序

2.1 精确匹配

2.2 路径匹配

2.3 扩展名匹配

2.4 缺省匹配

3 需要注意的问题

3.1 路径匹配和扩展名匹配无法同时设置

3.2  "/*"和"/"含义并不相同

3.3 tomcat默认配置的servlet

4 举例

5、其它参考文献


1 url-pattern匹配规则说明

  1. servlet容器中的匹配规则既不是简单的通配,也不是正则表达式,而是特定的规则。所以不要用通配符或者正则表达式的匹配规则来看待servlet的url-pattern。
  2. Servlet 2.5开始,一个servlet可以使用多个url-pattern规则,<servlet-mapping>标签声明了与该servlet相应的匹配规则,每个<url-pattern>标签代表1个匹配规则;
  3. 当servlet容器接收到浏览器发起的一个url请求后,容器会用url减去当前应用的上下文路径,以剩余的字符串作为servlet映射,假如url是http://localhost:8080/appDemo/index.html,其应用上下文是appDemo,容器会将http://localhost:8080/appDemo去掉,用剩下的/index.html部分拿来做servlet的映射匹配
  4. url-pattern映射匹配过程是有优先顺序的,后面详细说明。
  5. 而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了。

2 四种匹配规则优先顺序

1精确匹配 > 2 路径匹配 > 3 扩展名匹配 > 4 缺省匹配

2.1 精确匹配

<url-pattern>中配置的项必须与url完全精确匹配。

<servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/user/users.html</url-pattern><url-pattern>/index.html</url-pattern><url-pattern>/user/addUser.action</url-pattern>
</servlet-mapping>

  当在浏览器中输入如下几种url时,都会被匹配到该servlet
  http://localhost:8080/appDemo/user/users.html
  http://localhost:8080/appDemo/index.html
  http://localhost:8080/appDemo/user/addUser.action

  注意:

  • 空串属于精确匹配,只匹配项目根路径  http://localhost:8080/appDemo/  或 http://localhost:8080/appDemo
  • http://localhost:8080/appDemo/user/addUser/ 是非法的url,不会被当作http://localhost:8080/appDemo/user/addUser识别
  • 另外上述url后面可以跟任意的查询条件,都会被匹配,如 http://localhost:8080/appDemo/user/addUser?username=Tom&age=23 会被匹配到MyServlet。

2.2 路径匹配

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

<servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/user/*</url-pattern>
</servlet-mapping>

  路径以/user/开始,后面的路径可以任意。比如下面的url都会被匹配。
  http://localhost:8080/appDemo/user/users.html
  http://localhost:8080/appDemo/user/addUser.action
  http://localhost:8080/appDemo/user/updateUser.actionl

2.3 扩展名匹配

  以“*.”开头的字符串被用于扩展名匹配

<servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>*.jsp</url-pattern><url-pattern>*.action</url-pattern>
</servlet-mapping>

  则任何扩展名为jsp或action的url请求都会匹配,比如下面的url都会被匹配
  http://localhost:8080/appDemo/user/users.jsp
  http://localhost:8080/appDemo/toHome.action

2.4 缺省匹配

<servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>

3 需要注意的问题

3.1 路径匹配和扩展名匹配无法同时设置

  匹配方法只有三种,要么是路径匹配(以“/”字符开头,并以“/*”结尾),要么是扩展名匹配(以“*.”开头),要么是精确匹配,三种匹配方法不能进行组合,不要想当然使用通配符或正则规则。

  如<url-pattern>/user/*.action</url-pattern>是非法的

  另外注意:<url-pattern>/aa/*/bb</url-pattern>是精确匹配,合法,这里的*不是通配的含义

3.2  "/*"和"/"含义并不相同

  • “/*”属于路径匹配,并且可以匹配所有request,由于路径匹配的优先级仅次于精确匹配,所以“/*”会覆盖所有的扩展名匹配,很多404错误均由此引起,所以这是一种特别恶劣的匹配模式,一般只用于filter的url-pattern
  • “/”是servlet中特殊的匹配模式,切该模式有且仅有一个实例,优先级最低,不会覆盖其他任何url-pattern,只是会替换servlet容器的内建default servlet ,该模式同样会匹配所有request。
  • 配置“/”后,一种可能的现象是myServlet会拦截诸如http://localhost:8080/appDemo/user/addUser.action、http://localhost:8080/appDemo/user/updateUser的格式的请求,但是并不会拦截http://localhost:8080/appDemo/user/users.jsp、http://localhost:8080/appDemo/index.jsp,这是应为servlet容器有内置的“*.jsp”匹配器,而扩展名匹配的优先级高于缺省匹配,所以才会有上述现象。
  • tomcat 默认情况 “/*”是拦截所有请求,“/”拦截除了“.jsp”、“.jspx”的所有请求,原因见【 3.3tomcat默认配置的servlet】。而SpringMVC的DispatcherServlet配置的正式“/”,拦截了除了jsp、jspx以外的所有请求,把静态资源html、css都拦截了

3.3 tomcat默认配置的servlet

Tomcat在%CATALINA_HOME%\conf\web.xml文件中配置了默认的Servlet,配置代码如下,

    <servlet><servlet-name>default</servlet-name><servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class><init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>listings</param-name><param-value>false</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>default</servlet-name><url-pattern>/</url-pattern></servlet-mapping><servlet><servlet-name>jsp</servlet-name><servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class><init-param><param-name>fork</param-name><param-value>false</param-value></init-param><init-param><param-name>xpoweredBy</param-name><param-value>false</param-value></init-param><load-on-startup>3</load-on-startup></servlet><servlet-mapping><servlet-name>jsp</servlet-name><url-pattern>*.jsp</url-pattern><url-pattern>*.jspx</url-pattern></servlet-mapping>

4 举例

映射的URL对应的Servlet
/helloservlet1
/bbs/admin/*servlet2
/bbs/*servlet3
*.jspservlet4
/servlet5

实际请求映射的结果

去掉上下文路径的剩余路径

处理请求的Servlet

/hello

servlet1

/bbs/admin/login

servlet2

/bbs/admin/index.jsp

servlet2

/bbs/display

servlet3

/bbs/index.jsp

servlet3

/bbs

servlet3

/index.jsp

servler4

/hello/index.jsp

servlet4

/hello/index.html

servlet5

/news

servlet5

5、其它参考文献

Servlet的历史与规范_「有且仅有」-CSDN博客_servlet规范一、Servlet历史1. Servlet的由来背景 上世纪90年代,随着Internet和浏览器的飞速发展,基于浏览器的B/S模式随之火爆发展起来。 最初,用户使用浏览器向WEB服务器发送的请求都是请求静态的资源,比如html、css等。 但是可以想象:根据用户请求的不同动态的处理并返回资源是理所当然必须的要求。CGI 必须要满足上述需求,所以CGI(Common Gat...https://blog.csdn.net/u010297957/article/details/51498018

servlet的url-pattern匹配规则 - canger - 博客园首先需要明确几容易混淆的规则: 一、四种匹配规则 1 精确匹配 <url-pattern>中配置的项必须与url完全精确匹配。 当在浏览器中输入如下几种url时,都会被匹配到该shttps://www.cnblogs.com/canger/p/6084846.html


http://chatgpt.dhexx.cn/article/4jqAewyG.shtml

相关文章

JavaWeb开发中,servlet的url-pattern的映射规则

原文出处&#xff1a;http://www.cnblogs.com/mailingfeng/archive/2012/04/05/2432687.html Servlet和filter是J2EE开发中常用的技术&#xff0c;使用方便&#xff0c;配置简单。servlet和filter中的url-pattern有一些文章在里面的&#xff0c;总结了一些东西&#xff0c;以免…

006_url-pattern配置

一. url-pattern配置 1. 在web.xml里面注册Servlet映射(servlet-mapping), 在Servlet里面我们需要配置url-pattern。url-pattern的作用就是在地址栏上的访问路径, 一定要以/打头。 2. 全路径匹配, 一级或者多级路径, 写法: /HWS或者/example/HWS。 请求路径: localhost:808…

Servlet学习(四):urlPattern配置与XML配置

1、urlPattern配置 Servlet类编写好后&#xff0c;要想被访问到&#xff0c;就需要配置其访问路径&#xff08;urlPattern&#xff09; 一个Servlet,可以配置多个urlPattern package com.itheima.web;import javax.servlet.ServletRequest; import javax.servlet.ServletRespo…

Makefile中变量的定义及赋值

1. 定义变量 Makefile 文件中定义变量的基本语法如下&#xff1a; 变量的名称值列表 Makefile 中的变量的使用其实非常的简单&#xff0c;因为它并没有像其它语言那样定义变量的时候需要使用数据类型。变量的名称可以由大小写字母、阿拉伯数字和下划线构成。等号左右的空白符…

makefile之.PHONY

1. 版本说明 首先说一下我用的make版本&#xff1a; GNU Make 4.2.1 2. 无PHONY无clean的情况&#xff08;无clean指当前目录下不存在clean文件&#xff09; 文件名&#xff1a;makefile (听说M必须大写&#xff0c;我用小写也可以执行成功) 文件内容&#xff1a; 且目录下…

Makefile文件:Makefile介绍

本文介绍Makefile的一些基本概念以及简单的用法。本文所用的编译器是Hightec tricore v4.9.1.0。 文章目录 1 Makefile的作用2 Makefile的规则3 一个简单的Makefile3.1 帮助文档中的例子3.2 例1&#xff1a;一个简单的Makefile 4 make是如何执行Makefile的4.1 默认目标4.2 例2…

Makefile入门详解

文章目录 一、Makefile简介二、makefile 原理1、当有依赖文件不存在2、当所有依赖文件存在 三、makefile基本规则1.makefile规则三要素2.基本规则3、makfile中的变量3.1普通变量3.2自动变量3.3例程 4、makefile中的伪目标 四、makefile其他常用的规则五、makefile中的函数5.1函…

makefile脚本

文章目录 1.makefile进行工程管理2.文档里面输入的内容3.如何运行这个makefile文件3.makefile 的变量4.其他 1.makefile进行工程管理 先创建一个名称为makefile或者Makefile的文档 2.文档里面输入的内容 输入相应内容的时候&#xff0c;要遵循相应的规则 规则&#xff1a;用…

makefile简介

1.make是一个应用程序 解析源程序之间的依赖关系 根据依赖关系自动维护编译工作 执行宿主操作系统中的各种命令 2.makefile是一个描述文件 定义一系列的规则来指定源文件编译的先后顺序 拥有特定的语法规则&#xff0c;支持函数定义和函数调用 能够直接集成操作系统中的各种命…

makefile变量

1.变量和不同的赋值方式 (1)makefile中支持程序设计语言中变量的概念 (2)makefile中的变量只代表文本数据(字符串) (3)makefile中的变量名规则 变量名可以包含字符&#xff0c;数字&#xff0c;下划线 不能包含“:”&#xff0c;"#"&#xff0c;"“或” " …

Makefile介绍

Makefile 是一种常用于编译的脚本语言&#xff0c;它可以更好更方便的管理你的项目的代码编译&#xff0c;节约编译时间&#xff08;没改动的文件不编译&#xff09;。 注意 Makefile 文件命令必须是 Makefile 或者 makefile&#xff0c;并使用 make 命令编译。 1. 1个…

如何编写一个Makefile文件(手把手的教你)

如果有帮助&#xff0c;希望点赞支持&#xff0c;我会更有创作的动力哦 目录 一、概念理解&#xff08;彩蛋藏在某个地方&#xff09;1.1 什么是Makefile&#xff1f;1.2 为何使用Makefile&#xff1f; 二、实战代码演示与讲解2.1 没有makefile的项目是怎么创建运行的2.1.1 创建…

Makefile入门(超详细一文读懂)

1、Makefile编译过程 Makefile文件中的命令有一定规范&#xff0c;一旦该文件编写好以后在Linux命令行中执行一条make命令即可自动编译整个工程。不同厂家的make可能会稍有不同&#xff0c;并且语法上也有区别&#xff0c;不过基本思想都差不多&#xff0c;主要还是落在目标依赖…

刘玉真先生语录

或问&#xff1a;“古今之法门多矣&#xff0c;何以此教独名‘净明忠孝’ ? ” 先生曰&#xff1a;“别无他说&#xff0c;‘净明’只是正心诚意&#xff0c;‘忠孝’只是扶植纲常。但世人习闻此语&#xff0c;多是忽略过去&#xff0c;此间却务真践实履。” 先生曰&#xff1…

俞敏洪用20年的经验笑谈人生:不要在穷的时候假装崇高

转载于: https://www.huxiu.com/article/174774/1.html 虎嗅注&#xff1a;本文是新东方创始人、洪泰基金联合创始人俞敏洪&#xff0c;于12月1日在麻省理工学院跟学生做的一个主题演讲&#xff0c;言辞幽默&#xff0c;充满智慧&#xff0c;有太多人生的道理。本文由微信公众号…

每日言论:『模仿他人是人生陷阱』

公众号关注 「奇妙的 Linux 世界」 设为「星标」&#xff0c;每天带你玩转 Linux &#xff01; 最近&#xff0c;我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神&#xff0c;有兴趣的同学可以加入和我们一起交流技术&#xff0c;在 「奇妙的 Linux 世界」 公…

38岁,外企技术经理,失业:职场遇到瓶颈,你可能掉进了“能力陷阱”!

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID&#xff1a;jishulingdaoli) 一位读者小R&#xff0c;给我讲述了他的职场经历。 小R&#xff0c;2008年通信专业硕士毕业。先去了华为&#xff0c;做了1年觉得有点苦&#xff0c;就去学了1年英语&#xff0c;后来跳槽到摩托罗拉。…

复旦大学教师 于娟博士《为啥是我得癌症?》

复旦女教师于娟已经去世半年多了&#xff0c;但这篇《为啥是我得癌症&#xff1f;》值得每个人认真阅读。 于娟&#xff0c;女&#xff0c;32岁&#xff0c;祖籍山东济宁&#xff0c;海归&#xff0c;博士&#xff0c;复旦大学优秀青年教师&#xff0c;一个两岁孩子的母亲&a…

《思考致富》不应该指望不经历“暂时的失败”便能发财

目录 作者简介 经典摘录 机遇有个狡猾的习惯&#xff0c;喜欢从后门悄悄溜进来&#xff0c;往往还喜欢以灾难或暂时失败的方式乔装露面 离金矿仅有三英尺远 欲望&#xff1a;成就一切的起点&#xff08;通往致富之路的第一步&#xff09; 信念&#xff1a;在脑海里目睹并坚…

复旦女博士于娟:为啥是我得癌症?

复旦女博士于娟&#xff1a;为啥是我得癌症&#xff1f;【请所有的朋友看看此文】 复旦女教师于娟已经去世半年多了&#xff0c;但这篇《为啥是我得癌症&#xff1f;》值得每个人认真阅读。不要再瞎吃八吃、暴饮暴食、嗜荤如命&#xff0c;不要再拼命工作、天天熬夜&#xff0…