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 中的前端控 ...
随机推荐
- 用户体验评价——win10自带微软拼音输入法
目前正在使用的一款输入法就是win10自带的微软拼音输入法, 用户界面,一直在用个人感觉最大的特点就是十分简洁,界面的布局十分清晰,可以隐藏悬浮窗让他显示在菜单栏, 另外其记住用户输入习惯方面也十分优 ...
- TCP三次握手和四次挥手相关
客户端A 服务端BSYN (建立连接位标识 1为建立联机) ACK (确认位标识 1为确认) seq (一个随机顺序码) ack(一个确认号码,通常为seq+1) 三次握手:1.A 发起建立 连接 的 ...
- 记录一次URL中有特殊字符怎么处理?
你out了,赶紧换 RestTemplate 吧! 进入正题,直接实战!!! import java.util.HashMap; import java.util.Map; import org.ju ...
- 《C++语言导学》小记
我看的这本是Bjarne Stroustrup写的,南开大学的杨巨峰和王刚译的.这本书不适合初学者看,我就是大概翻了翻其中感兴趣的章节. 这本书第14章的标题是“历史和兼容性”,这节内容我看了收获很深 ...
- Python列表中去重的多种方法
怎么快速的对列表进行去重呢,去重之后原来的顺序会不会改变呢? 去重之后顺序会改变 set去重 列表去重改变原列表的顺序了 l1 = [1,4,4,2,3,4,5,6,1] l2 = list(set( ...
- idtcp实现文件下载和上传
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- Docker 三剑客--Machine
Machine 我们知道在多个集群服务环境下,安装管理Docker的容器,要使用的是Docker Swarm,而使用Docker Swarm的情况是在多个集群的服务器已经搭建好Docker环境的情况下 ...
- Python opencv计算批量图片的BGR各自的均值
#coding:utf-8 #第一种方式 很慢很慢 自己写的如何计算均值 ''' import cv2 import os def access_pixels(frame): print(frame. ...
- 嵌入式Linux环境变量如何参与程序运行
1.环境变量一共有两份,一份在Flash中,另一份在DDR中.uboot开机时一次性从Flash中读取全部环境变量到DDR中作为环境变量的初始化值,然后使用过程中都是用DDR这一份,用户可以用save ...
- android蜂巢效果、环形菜单、Kotlin影视应用、简约时钟、查看导出App、支付宝AR扫码效果等源码
Android精选源码 一个蜂巢布局管理器,外观帅气外,动画效果也是很赞 一个基础 UI 框架项目,实现不同布局格式的混排 仿建行app效果,一个环形菜单的布局管理器源码 基于组件化实现的一款用Kot ...