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

<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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,253评论 19 139
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,417评论 11 349
  • 1.Spring web mvc介绍 Spring web mvc和Struts2都属于表现层的框架,它是Spri...
    七弦桐语阅读 11,626评论 2 38
  • 额(⊙o⊙)…继续记笔记。。。看看SpringMVC从入门到放弃之第一章Web MVC简介一个在实验室的时候就是这...
    键盘瞎阅读 2,112评论 2 10
  • 人生有着不同的体验,不同的感受,才叫人生,短时间内呈现出来这就是一个浓缩版的人生。 这五天以来,一直在忙着手拉手资...
    旅途觉醒阅读 384评论 0 0