<url-pattern>/</url-pattern><url-pattern>/*</url-pattern>的区别


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


servleturl-pattern设置为/时, 它仅替换servlet容器的默认内置servlet,用于处理所有与其他注册的servlet不匹配的请求。直白点说就是,所有静态资源(js,css,image,html等)的访问都将交给该servlet处理,而jsp页面则交给servlet容器内置的JSP servlet处理。

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


servleturl-pattern设置为/*时,它会覆盖其他所有的servlet,包括servlet容器提供的所有servlet,如缺省servletJSP 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文件

DispatcherServleturl-pattern设置为/时:

我们可以看到结果

  1. /hello.html没有访问到自己本该访问到的页面说明静态资源被DispatcherServlet拦截处理了。
  2. /index.html访问到自己本该访问到的页面这是因为SpringMVC开启了静态资源访问,结合1来看,如果静态资源的前缀名与Controller中处理的请求同名时,会被Controller中的请求覆盖,否则就会返回静态资源本来的页面。
  3. /hello.jsp/index.jsp请求都访问到了本该属于自己的页面说明jsp页面没有被DispatcherServlet拦截处理。

DispatcherServleturl-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中/与/*的区别相关推荐

  1. URI,URL和URN有什么区别?

    人们谈论URL , URI和URN好像是不同的东西,但是用肉眼看起来都是一样的. 它们之间有什么明显区别? #1楼 这是我的简化: URN:唯一资源名称,即" what"(例如ur ...

  2. ?: (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 ...

  3. avascript怎么获取指定url网页中的内容

    目录 一.总结 一句话总结:推荐jquery中ajax,简单方便. 1.js能跨域操作么? 二.用php获取 三.jquery中ajax获取 四.通过node.js获取 回到顶部 >  一.总结 ...

  4. MyBatis中#{}和${}的区别

    ------------------------siwuxie095 MyBatis 中 #{} 和 ${} 的区别 1.在 MyBatis 的映射配置文件中,动态传递参数有两种方式: (1)#{} ...

  5. Mybatis 中$与#的区别

    1 #是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的时候,就相当于 select i ...

  6. mybatis 中#与$的区别

    2019独角兽企业重金招聘Python工程师标准>>> MyBatis中#和$的区别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #u ...

  7. js中!和!!的区别及用法

    js中!和!!的区别及用法 js中!的用法是比较灵活的,它除了做逻辑运算常常会用!做类型判断,可以用!与上对象来求得一个布尔值, 1.!可将变量转换成boolean类型,null.undefined和 ...

  8. 在URL地址栏中显示ico

             <!-- 在URL地址栏中显示ico -->         <link Rel="SHORTCUT ICON" href="imag ...

  9. Activity中与ListActivity中使用listview区别

    一.Activity中与ListActivity中使用listview区别(本身没多大区别,只是ListActivity在listview的显示上做了一些优化) Activity中使用Listview ...

最新文章

  1. SubVersion(SVN) 服务器Windows安装指南
  2. Native层HIDL服务的获取原理-Android10.0 HwBinder通信原理(七)
  3. 再学大话设计模式--附录(三)
  4. LED调光,PFM即pulse frequence modulation
  5. linux mysql主主复制_MySQL主从复制与主主复制
  6. 攻防世界easyJava(re Moble)
  7. Exchange与ADFS单点登录 PART 3:部署和配置WAP
  8. best single model of RSNA
  9. mysql 和 sqlserver sql差异比较
  10. mybatisPlus中的updateById无法更新null值的字段
  11. Markdown示例
  12. 坚决反对“企业文学化”
  13. 【OpenCV学习笔记】【函数学习】十(常用的OpenCV函数汇总说明)
  14. 冒泡排序法C语言代码
  15. Unity开发 罗技方向盘 G29 白话版
  16. unity3d 破解
  17. egret引擎p2物理引擎(2) - 小球碰撞地面搞笑的物理现象
  18. 单片机音频节奏灯_基于单片机的音乐节奏彩灯控制系统设计
  19. CURD同事狂刷阿里面试指南(恒山版),直接斩获七个offer
  20. Excel图表宝典(英文版) - 图表初步

热门文章

  1. 生命线检查计算机还是连接线,生命线和智慧线相连起始段成锁链纹代表什么
  2. python菜鸟驿站-Python XML 解析
  3. 三国志战略版:Daniel_S6再论五谋
  4. 真正的JavaScript加密和网页资源加密系统,从原理到实现
  5. Java基础之序列化(类属性由驼峰转换成下划线)
  6. .net core底层入门学习笔记(十一-JIT编译器)
  7. java日程管理源代码_Java日程管理——万年行事历源代码
  8. 拓展欧几里得小结(转载)
  9. 数据结构基础-周末舞会-----详细题解
  10. 保姆级教程超硬核包会,SystemVerilog SV 覆盖率