理论---url pattern 匹配规则
开始:
在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 匹配规则相关推荐
- JavaWeb(十)——jetty服务器、创建jsp项目、servlet生命周期及url的匹配规则
文章目录 1. jetty服务器的下载与安装 1.1 jetty简介 1.2 jetty的下载与安装 2. idea创建jsp项目 3. idea给jsp项目导入jar包 4. 编写第一个servle ...
- 前端控制器html,DispatcherServlet(前端控制器)访问顺序和url匹配规则
前端控制器访问流程图: dispatcher代码导入: dispatcher org.springframework.web.servlet.DispatcherServlet 1 login.jsp ...
- Django中url匹配规则的补充
Django中url匹配规则是在urls.py文件中配置的. 1.关于正则匹配优先级 在url匹配列表中,如果第一条和第二条同时满足匹配规则,则优先匹配第一条. 在url匹配列表中,如果第一条为正则模 ...
- Shiro集成Web时的url匹配规则
场景 从实例入手学习Shiro与Web的整合: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/90140802 实现 在上面实现W ...
- Nginx篇之路由匹配规则以及配置url转发
一.前言 一般我们经常在访问网站时,通常会遇到输入某个页面的网址时,出现路由的转发,重定向等.可能访问的是一个网址,出来的时候就显示的是另外的地址. 这种情况下,通常属于nginx的页面跳转. 二.N ...
- location 匹配规则 (NGINX)
转:https://moonbingbing.gitbooks.io/openresty-best-practices/ngx/nginx_local_pcre.html location 匹配规则 ...
- nginx匹配规则说明以及匹配的优先级
location 匹配规则 语法规则 location [=|~|~*|^~] /uri/ { - } 模式 含义 location = /uri = 表示精确匹配,只有完全匹配上才能生效 locat ...
- tomcat首页welcome-file-list设置与url-pattern匹配规则
一.welcome-file-list 1. <welcome-file-list>标签下可以设置多个首页<welcome-file>,容器启动后会在根目录下依次查找匹配的物理 ...
- linux 路由匹配原则,Nginx localhost路由匹配规则
URI 即统一标识资源符,通用的 URI 语法格式如下: scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment] 格式说明 ...
最新文章
- 解决pytorch-gpu 安装失败方案
- 一元操作符“++”,“- ” 之强制转换数值
- 《深度学习》课程视频(含30份资料)
- wxWidgets:创建一个 Frame
- C++中各种智能指针的实现及弊端(五)
- mybatis 取传进来的参数 mybatis #{ } ${ }区别是啥?
- getcwd和pwd为什么不一样_农村医保,为什么每个地区收费不一样?
- kill -9 无法杀掉进程
- CentOS搭建SVN记录
- 8个免费在线字体转换器
- 5V和USB供电 的隔离电路
- noip2014 无线网路发射器选址 (模拟)
- 进制转换(进制转换)
- 员工被提拔,还是被干掉,就看这3点......
- hystrix 熔断器
- 制作U盘启动盘重装macOS High Sierra
- 用亦或逻辑处理交换方法
- gdb工具pwndbg与peda与gef
- oracle imp导入时出现skipping table
- 三星PM9A1 00B00公版7801Q固件分享及升级教程
热门文章
- php volist用法,ThinkPHP中volist标签的使用
- 20南邮计算机考研心得
- java字符串转时间戳_java时间戳与字符串相互转换
- Android 挂逼 修炼之行---微信实现本地视频发布到朋友圈功能
- 第二十二节:通信之WLAN(802.11ax@TWT-I)
- 精度及3σ(三西格马定律)
- oracle+查询spid,根据sql_id查找 spid
- CF虚拟机提示无法登陆怎么解决, 虚拟机过检测代码 。
- c语言#include windows.h,c语言之ls目录的简单实现和window版本dirent.h
- 英酷词典 官方主页