开始:

在web应用部署描述符中,用于映射的语法规定如下:

①以"/"字符开头,并以"/*"结尾的字符串用于路径映射

②以"*"开头的字符串被用于扩展名映射

③空字符串("")(?"" 和"  "相等吗 ?)是用于指定精确映射应用程序 context root 的URL 模式,比如从 http://host:port/<contextroot>/来的请求。

④字符串中仅有"/"字符时,表示应用程序"默认"的servlet。

在这种情况下servlet路径是请求url去掉context路径,

⑤其他的字符串仅用于精确匹配

<url-pattern>的三种写法

1.精确匹配。以"/"开头,加上servlet名称

◇/desc

2.路径匹配。以"/"开头,加上通配符"*"。

◇/*

3.扩展名匹配。以通配符"*"开头,加上扩展名

◇*。action

在利用servlet或filter进行url请求的匹配时,

很关键的一点是匹配规则,

但是servlet容器中的匹配规则既不是简单的通配

也不是正则表达式

而是有自己的规则

比较容易混淆

●绝对路径和相对路径

当浏览器发起一个url请求后,该请求发送到servlet容器的时候,

容器会先将请求的url减去当前应用上下文的路径作为servlet的映射url,

比如url是

http://localhost:8080/myapp/demo/detail.jsp

其应用上下文是myapp,容器会将http://localhost:8080/myapp去掉,剩下的/demo/detail.html部分拿来做servlet的映射匹配

这个映射过程是有优先顺序的(具体的优先顺序规则后面介绍)

而且当有一个servelt匹配成功以后,就不会去理会剩下的servlet了

Filter的匹配规则和servlet一样,但对于filter,不会像servlet那样只匹配一个servlet

因为fileter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一个filter

Filter的处理顺序和filter-mapping在web.xml中定义的顺序相同

下面介绍各种匹配规则

一.精确匹配

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

<servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/kata/detail.html</url-pattern><url-pattern>/demo.html</url-pattern><url-pattern>/table</url-pattern>
</servlet-mapping>

当在浏览器中输入如下几种url时,都会被匹配到该servlet
http://10.43.11.143/myapp/kata/detail.html
http://10.43.11.143/myapp/demo.html
http://10.43.11.143/myapp/table

注意:

http://localhost:8080/myapp/demo/是非法的url,不会被当作

http://localhost:8080/myapp/demo识别

上述url后面跟任意的查询条件,都会被匹配,如

http://localhost:8080/myapp/demo?hello?xxx  这个请求就会被匹配到MyServlet

二.扩展名匹配

匹配规则如下

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

则任何扩展名为 jsp(文件名和路径任意)的url请求都会匹配,

比如下面的url都会被匹配

http://localhost:8080/myapp/demo/demo.jsp

http://localhost:8080/myapp/demo/test.jsp

三.路径匹配

如果匹配规则如下

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

则请求的url只要前面(myapp之后)的路径是/demo,而后面的路径可以任意

比如下面的url都会被匹配

http://localhost:8080/myapp/demo/demo.html

http://localhost:8080/myapp/demo/test.jsp

http://localhost:8080/myapp/demo/test/detail.html

http://localhost:8080/myapp/demo/action

http://localhost:8080/myapp/demo/action/

注意:路径和扩展名匹配无法通时设置,比如下面的三个<url-pattern>都是非法的,如果设置,启动tomcat服务器会报错

四,匹配任意的url

如果<url-pattern>配置成如下两种的任意一种

<url-pattern>/</url-pattern>
<url-pattern>/*</url-pattern>

则所有的url都可以被匹配上。其中/*是路径匹配,只是路径就是/。

五,优先顺序:

当一个url与多个servlet的匹配规则可以匹配时,则按照"精确路径>最长路径>扩展名"这样的优先级匹配到对应的servlet

举例如下:

总结: 本文介绍了servlet的匹配规则,总的来说就是分为 精确,路径和扩展名三种匹配方式,并且介绍了优先级

java web中servlet、jsp、html 互相访问的路径问题。

理论---url pattern 匹配规则相关推荐

  1. JavaWeb(十)——jetty服务器、创建jsp项目、servlet生命周期及url的匹配规则

    文章目录 1. jetty服务器的下载与安装 1.1 jetty简介 1.2 jetty的下载与安装 2. idea创建jsp项目 3. idea给jsp项目导入jar包 4. 编写第一个servle ...

  2. 前端控制器html,DispatcherServlet(前端控制器)访问顺序和url匹配规则

    前端控制器访问流程图: dispatcher代码导入: dispatcher org.springframework.web.servlet.DispatcherServlet 1 login.jsp ...

  3. Django中url匹配规则的补充

    Django中url匹配规则是在urls.py文件中配置的. 1.关于正则匹配优先级 在url匹配列表中,如果第一条和第二条同时满足匹配规则,则优先匹配第一条. 在url匹配列表中,如果第一条为正则模 ...

  4. Shiro集成Web时的url匹配规则

    场景 从实例入手学习Shiro与Web的整合: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/90140802 实现 在上面实现W ...

  5. Nginx篇之路由匹配规则以及配置url转发

    一.前言 一般我们经常在访问网站时,通常会遇到输入某个页面的网址时,出现路由的转发,重定向等.可能访问的是一个网址,出来的时候就显示的是另外的地址. 这种情况下,通常属于nginx的页面跳转. 二.N ...

  6. location 匹配规则 (NGINX)

    转:https://moonbingbing.gitbooks.io/openresty-best-practices/ngx/nginx_local_pcre.html location 匹配规则 ...

  7. nginx匹配规则说明以及匹配的优先级

    location 匹配规则 语法规则 location [=|~|~*|^~] /uri/ { - } 模式 含义 location = /uri = 表示精确匹配,只有完全匹配上才能生效 locat ...

  8. tomcat首页welcome-file-list设置与url-pattern匹配规则

    一.welcome-file-list 1. <welcome-file-list>标签下可以设置多个首页<welcome-file>,容器启动后会在根目录下依次查找匹配的物理 ...

  9. linux 路由匹配原则,Nginx localhost路由匹配规则

    URI 即统一标识资源符,通用的 URI 语法格式如下: scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment] 格式说明 ...

最新文章

  1. 解决pytorch-gpu 安装失败方案
  2. 一元操作符“++”,“- ” 之强制转换数值
  3. 《深度学习》课程视频(含30份资料)
  4. wxWidgets:创建一个 Frame
  5. C++中各种智能指针的实现及弊端(五)
  6. mybatis 取传进来的参数 mybatis #{ } ${ }区别是啥?
  7. getcwd和pwd为什么不一样_农村医保,为什么每个地区收费不一样?
  8. kill -9 无法杀掉进程
  9. CentOS搭建SVN记录
  10. 8个免费在线字体转换器
  11. 5V和USB供电 的隔离电路
  12. noip2014 无线网路发射器选址 (模拟)
  13. 进制转换(进制转换)
  14. 员工被提拔,还是被干掉,就看这3点......
  15. hystrix 熔断器
  16. 制作U盘启动盘重装macOS High Sierra
  17. 用亦或逻辑处理交换方法
  18. gdb工具pwndbg与peda与gef
  19. oracle imp导入时出现skipping table
  20. 三星PM9A1 00B00公版7801Q固件分享及升级教程

热门文章

  1. php volist用法,ThinkPHP中volist标签的使用
  2. 20南邮计算机考研心得
  3. java字符串转时间戳_java时间戳与字符串相互转换
  4. Android 挂逼 修炼之行---微信实现本地视频发布到朋友圈功能
  5. 第二十二节:通信之WLAN(802.11ax@TWT-I)
  6. 精度及3σ(三西格马定律)
  7. oracle+查询spid,根据sql_id查找 spid
  8. CF虚拟机提示无法登陆怎么解决, 虚拟机过检测代码 。
  9. c语言#include windows.h,c语言之ls目录的简单实现和window版本dirent.h
  10. 英酷词典 官方主页