SpringMVC配置前端控制器的路径问题
在使用SpringMVC时,都需要在web.xml中配置一个前端控制器DispatcherServlet
控制器是一个servlet,但这个路径配置就有很多种,之前都是以扩展名配置的路径,如*.do,然后再项目中就就*.do的路径进行访问。
但最近的项目遵循Restful风格,配置的路径如下

可以看到配置的路径为“/”,由于之前疑惑上网查,说是/*和/都是拦截所有请求,于是把这里的路径改成/*,之后项目就出先了404资源找不到的问题。
通过后来查阅资料,以自己的理解 /* 和 / 的区别如下
首先我们了解一下servlet的匹配规则
精度匹配>路径匹配>扩展名匹配>内省匹配 (这里具体就不举例了,想了解的同学可以自行百度)
所有这里的 /属于内省匹配模式(TomCat默认有一个这样的路径),/*属于路径匹配。所以当控制器返回一个结果视图访问时,如果配置的为/*.则SrpingMVC会再次拦截,但由于找不到相关的控制器,就会报404资源找不到。
如果这里配置的为 / ,首先会覆盖掉Tomcat中默认的,Tomcat默认的是用来处理静态资源的,比如html,jsp等一些静态资源。这里覆盖掉以后,我们就要自己考虑静态资源的处理了。

其次我发现在web.xml中又配置了这样一些路径,由于之前覆盖掉了Tomcat默认的,这里应该是将一些静态资源手动调用Tomcat的默认处理器进行处理,但是在这里面我们没有发现jsp页面,那么控制器返回的jsp还是会被 / 拦截进入到SpringMVC中。
所以为了防止资源找不到报404,在SpringMVC的配置文件中配置了如下的配置信息

首先
的作用是对进入到SpringMVC的静态资源进行处理,功能同Tomcat默认的DefaultServlet功能类似
其次
这个的作用是当进入到SpringMVC中并且路径为 / 时,默认跳转到/index.html界面,这貌似就是跳转主页功能。
最后
是SpringMVC提供处理静态资源的,详细用法自行百度。
有个疑惑,假如我访问一个js文件,web.xml里面配置了*.js交给Tomcat处理(扩展名匹配),DispatcherServlet又配置的是‘/’ (内省匹配),而扩展名优先级大于内省,所以说当我访问一个JS静态资源时,是不会进入SpringMVC中的,但这里又在SpringMVC中配置了一些静态资源的处理,不知道有什么用???
总结:
1./*和/都可以拦截所有请求,但是优先级不一样,/*的优先级要高于/,这也是为什么配置/*会报资源找不到的问题,因为根本到达不了Tomcat默认的Servlet来处理静态资源。
2.网上说的/*拦截扩展名的,/不会拦截带扩展名的,我觉得这总说法是不对的。还是要理解servlet的匹配规则。
SpringMVC配置前端控制器的路径问题的更多相关文章
- springMVC(一) --前端控制器(DispatcherServlet)的作用
SpringMVC是Spring中的模块,它实现了mvc设计模式的web框架,首先用户发出请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户 ...
- springmvc前端控制器拦截路径的配置报错404
1.拦截"/",可以实现现在很流行的REST风格.很多互联网类型的应用很喜欢这种风格的URL.为了实现REST风格,拦截除了jsp的所有. 2.拦截/*,拦截所有访问,会导致404 ...
- springmvc的前端控制器
<servlet> <servlet-name>xxx</servlet-name> <servlet-class>org.springframewor ...
- springMVC配置拦截器、过滤器、前端控制器时遇到的问题总结
1.业务场景:使用vuejs+springMVC+spring框架搭建一个mis系统,集成SSO单点登录: 2.遇到问题:使用interceptor拦截器配置SSO单点登录,直接敲域名,或者ip+端口 ...
- SpringMVC传统风格控制器和基于注解的控制器
SpringMVC的DispatcherServlet 之前说过springMVC是使用Servlet作为控制器,就是这个用于调度的DispatcherServlet了.这个是servlet,可以根据 ...
- springMvc配置 中文api
http://7xvpsh.com1.z0.glb.clouddn.com/publish/21-2/the-dispatcher-servlet.html springmvc4.1.7:配置 复制转 ...
- SpringMVC配置顺序的问题
1:web.xml:web应用一经加载,先来找他 1):指明applicationContext的位置 2):引入spring监听,ContextLoaderListe ...
- 配置<welcome-file>为自定义路径
welcome-file是web.xml中的一个配置,其作用是配置启动项目时默认跳转的欢迎页面,一般我们会将其指定为一个静态页面. 那如果我们要将自定义的请求路径作为欢迎页面该怎么做呢? 1.配置we ...
- SpringMVC 配置和请求方式
SpringMVC 总结内容 一.什么是 Spring MVC ? Spring MVC 是 Spring 对 MVC 思想的实现(三层架构) 优点: 二.前端控制器 Spring MVC 中的前端控 ...
随机推荐
- js.console携程近期低价机票信息
!function(){var city = {"SHA":"上海虹桥","PVG":"上海浦东","YIW& ...
- H3C S10512虚拟化配置
软件版本:Version 7.1.070, Release 7585P05 1.配置SW1#设置SW1的成员编号为1,创建IRF端口2,并将它与物理接口Ten-G0/0/45.Ten-G0/0/46. ...
- 3.GIT常用命令
往仓库里面添加文件 将新的文件放到暂存区 git add 文件名(多个文件用空格分隔) git commit -m '说明内容' git commit --amend 此修改一般用于未push之前修改 ...
- [极客大挑战 2019]Havefun
打开题目右键查看源代码 <!--$cat=$_GET['cat']; echo $cat; if($cat=='dog') {echo 'Syc{cat_cat_cat_cat}';}--> ...
- scala快排
笔记积累,直接看代码吧,sublime上运行的 def quickSort(ls:List[Int]):List[Int]={ if (ls.isEmpty) ls else quickSort(ls ...
- Dynamics CRM - 如何创建一个新的 Organization
最近需要新建几个 CRM 的场来测试或者开发,也就是要新建 Organization,但是每次我都忘了在哪操作,写篇 blog mark 一下. 首先,新建 Organization 当然是要在 CR ...
- 19 docker 多机器通信
1. 本章实验 2. 环境搭建 1.编写 Vagrantfile 并创建虚拟机 并虚拟机node1绑定外部 192.168.205.10:8888 node2绑定外部 192.168.205.10:9 ...
- MyBatis从入门到精通(第4章):MyBatis动态SQL【foreach、bind、OGNL用法】
(第4章):MyBatis动态SQL[foreach.bind.OGNL用法] 4.4 foreach 用法 SQL 语句中有时会使用 IN 关键字,例如 id in (1,2,3).可以使用 ${i ...
- UML-如何画顺序图?
1.生命线框图和生命线 生命线:可以为虚线(源于UML1),也可以是实线 2.消息 1).创始消息,实心圆开头2).同步消息,实心箭头 3.执行规格条和控制期 控制期:阻塞调用 4.返回值 5.自身消 ...
- Linux进程的引入
1.什么是进程? (1).进程是一个动态过程而不是静态实物 (2).进程就是程序的一次运行过程,一个静态的可执行程序a.out的一次运行过程(./a.out从运行到结束)就是一个进程. (3).进程控 ...