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 中的前端控 ...
随机推荐
- 基于python的爬虫流程图(精简版)
网址: https://www.processon.com/view/link/5e1148b8e4b07db4cfa9cf34 如果链接失效,请及时反馈(在评论区评论),博主会及时更新
- CentOS 7.3 安装redis 4.0.2服务
CentOS 7.3 安装redis 4.0.2服务 1.下载解压 下载地址:/home/xiaoming/ wget http://download.redis.io/releases/redis- ...
- vi_终端中的编辑器操作
vi -- 终端中的编辑器 目标 vi 简介 打开和新建文件 三种工作模式 常用命令 分屏命令 常用命令速查图 01. vi 简介 1.1 学习 vi 的目的 在工作中,要对 服务器 上的文件进行 简 ...
- 合并两个django的queryset
有queryset:A和B 要合并它们,根据网上的答案,貌似是用itertools库的chain对象比较好,地址 c=chain(x,y) 但是当c用于分页的时候,就有问题,会报chain没有le ...
- java 的HashMap底层数据结构
HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在.在HashMap中,key-value总是会当做一个整体来处理,系统会根据 ...
- java的io字符流关闭和刷新.flush();
因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中. 但是关闭的流对象,是无法继续写出数据 的.如果我们既想写出数据,又想继续使用流,就需要 flush 方法了. flush :刷新缓冲区, ...
- 蓝桥杯剪格子dfs
#include<iostream> #include<cstring> #include<iomanip> #include<cmath> #incl ...
- 基于node的前后端分离初识
久闻node的大名,先后也看过node的文档,但是,总是碍于没有挑起我的G点,所以实际codeing的例子都没有.最近,突然很有兴致,想把原有用页面ajax渲染的页面采用服务端node来渲染,研究了两 ...
- Linux 安装python3.x步骤
本文转发自博客园非真的文章,内容略有改动 本文已收录至博客专栏linux安装各种软件及配置环境教程中 linux系统本身默认安装有2.x版本的python,版本x根据不同版本系统有所不同,通过pyth ...
- JavaScript学习笔记 - 入门篇(3)- DOM操作
认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面代码 ...