url pattern中/与/*的区别
<url-pattern>/</url-pattern>
与<url-pattern>/*</url-pattern>
的区别
<url-pattern>/</url-pattern>
:
servlet
的url-pattern
设置为/
时, 它仅替换servlet容器
的默认内置servlet
,用于处理所有与其他注册的servlet
不匹配的请求。直白点说就是,所有静态资源(js,css,image,html等)的访问都将交给该servlet处理,而jsp页面则交给servlet容器
内置的JSP servlet
处理。
<url-pattern>/*</url-pattern>
:
servlet
的url-pattern
设置为/*
时,它会覆盖其他所有的servlet
,包括servlet容器
提供的所有servlet
,如缺省servlet
和JSP servlet
。 无论你发出什么请求,都会在该servlet
拦截处理。通常我们不会这么做。如果你只是想使用/*
,那么你可以在Filter
中使用,它处理完后会将url
交给servlet
处理。
实例说明
直接解释<url-pattern>/</url-pattern>
与<url-pattern>/*</url-pattern>
的区别,可能不是那么直观,我们用实验来说话吧。
有一个SpringMVC项目中,已开启静态资源访问,所有编码均为UTF-8
:
- 有一个
Controller
,处理/hello
请求,返回/index.jsp
页面 - 有一个
hello.html
文件 - 有一个
hello.jsp
文件 - 有一个
index.html
文件 - 有一个
index.jsp
文件
DispatcherServlet
的url-pattern
设置为/
时:
我们可以看到结果
/hello.html
没有访问到自己本该访问到的页面说明静态资源被DispatcherServlet
拦截处理了。/index.html
访问到自己本该访问到的页面这是因为SpringMVC开启了静态资源访问,结合1
来看,如果静态资源的前缀名与Controller
中处理的请求同名时,会被Controller中的请求覆盖,否则就会返回静态资源本来的页面。/hello.jsp
和/index.jsp
请求都访问到了本该属于自己的页面说明jsp页面没有被DispatcherServlet
拦截处理。
DispatcherServlet
的url-pattern
设置为/*
时:
11.jpg
12.jpg
13.jpg
14.jpg
15.jpg
/hello.jsp
和/index.jsp
都访问到了自己页面的源码,说明jsp页面都被DispatcherServlet
拦截处理了,并且DispatcherServlet
自己还处理不好这些jsp页面(不能对jsp页面进行解析),所以直接返回它们的源码信息,并且编码都变得不可控,编码还由原来的UTF-8
变成了GBK
。
注意:顺便说一下,
- 仅仅只能拦截处理主页请求:
<url-pattern></url-pattern>
什么请求都不能拦截处理,相当于没有设置:
<url-pattern>/**</url-pattern>
url pattern中/与/*的区别相关推荐
- URI,URL和URN有什么区别?
人们谈论URL , URI和URN好像是不同的东西,但是用肉眼看起来都是一样的. 它们之间有什么明显区别? #1楼 这是我的简化: URN:唯一资源名称,即" what"(例如ur ...
- ?: (2_0.W001) Your URL pattern...This was likely an oversight when migrating to django.urls.path().”
在运行Django过程中,PyCharm的console提示"WARNINGS: ?: (2_0.W001) Your URL pattern '^index' has a route th ...
- avascript怎么获取指定url网页中的内容
目录 一.总结 一句话总结:推荐jquery中ajax,简单方便. 1.js能跨域操作么? 二.用php获取 三.jquery中ajax获取 四.通过node.js获取 回到顶部 > 一.总结 ...
- MyBatis中#{}和${}的区别
------------------------siwuxie095 MyBatis 中 #{} 和 ${} 的区别 1.在 MyBatis 的映射配置文件中,动态传递参数有两种方式: (1)#{} ...
- Mybatis 中$与#的区别
1 #是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的时候,就相当于 select i ...
- mybatis 中#与$的区别
2019独角兽企业重金招聘Python工程师标准>>> MyBatis中#和$的区别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #u ...
- js中!和!!的区别及用法
js中!和!!的区别及用法 js中!的用法是比较灵活的,它除了做逻辑运算常常会用!做类型判断,可以用!与上对象来求得一个布尔值, 1.!可将变量转换成boolean类型,null.undefined和 ...
- 在URL地址栏中显示ico
<!-- 在URL地址栏中显示ico --> <link Rel="SHORTCUT ICON" href="imag ...
- Activity中与ListActivity中使用listview区别
一.Activity中与ListActivity中使用listview区别(本身没多大区别,只是ListActivity在listview的显示上做了一些优化) Activity中使用Listview ...
最新文章
- SubVersion(SVN) 服务器Windows安装指南
- Native层HIDL服务的获取原理-Android10.0 HwBinder通信原理(七)
- 再学大话设计模式--附录(三)
- LED调光,PFM即pulse frequence modulation
- linux mysql主主复制_MySQL主从复制与主主复制
- 攻防世界easyJava(re Moble)
- Exchange与ADFS单点登录 PART 3:部署和配置WAP
- best single model of RSNA
- mysql 和 sqlserver sql差异比较
- mybatisPlus中的updateById无法更新null值的字段
- Markdown示例
- 坚决反对“企业文学化”
- 【OpenCV学习笔记】【函数学习】十(常用的OpenCV函数汇总说明)
- 冒泡排序法C语言代码
- Unity开发 罗技方向盘 G29 白话版
- unity3d 破解
- egret引擎p2物理引擎(2) - 小球碰撞地面搞笑的物理现象
- 单片机音频节奏灯_基于单片机的音乐节奏彩灯控制系统设计
- CURD同事狂刷阿里面试指南(恒山版),直接斩获七个offer
- Excel图表宝典(英文版) - 图表初步
热门文章
- 生命线检查计算机还是连接线,生命线和智慧线相连起始段成锁链纹代表什么
- python菜鸟驿站-Python XML 解析
- 三国志战略版:Daniel_S6再论五谋
- 真正的JavaScript加密和网页资源加密系统,从原理到实现
- Java基础之序列化(类属性由驼峰转换成下划线)
- .net core底层入门学习笔记(十一-JIT编译器)
- java日程管理源代码_Java日程管理——万年行事历源代码
- 拓展欧几里得小结(转载)
- 数据结构基础-周末舞会-----详细题解
- 保姆级教程超硬核包会,SystemVerilog SV 覆盖率