default-servlet-handler不生效原因,springmvc静态资源拦截方案比较
springmvc为什么要拦截静态资源?
简单来说,为了请求的url不带类似*.action,*.do,比如http://localhost:8080/system/index.action,spring团队统一风格,而web项目配置的web.xml中,所有请求都必须走过DispatcherServlet,当然就包括了静态资源,比如http://localhost:8080/html/index.html,为了解决这个问题,spring给了两种方案,下面我们一起来讨论下两种方案的使用和区别,给新手同学们一个很自白,清晰的认识!
解决办法
说解决办法之前,咱先来聊下web项目的结构,如下图所示,大家可以看到默认webapp下有个WEB-INF文件夹,这个文件夹是提升文件安全级别的,如果不设置,是访问不到的,所以大家一般看到的资源文件(jsp,css,jss)都在WEB-INF文件夹下。
解决办法1:
<mvc:default-servlet-handler />
如果项目是这样配置的,你访问不到WEB-INF/css/下的文件,因为springmvc上下文定义了一个DefaultServletHttpRequestHandler用于处理静态文件的,他做的工作是转发给Spring默认处理器DispatcherServlet,DispatcherServlet能处理webapp下没有权限目录文件,它不能处理WEB-INF文件夹,也就是说你配置了<mvc:default-servlet-handler />,你能够访问html下的文件,但是你访问不了WEB-INF/css/下的文件,这可能是文件夹权限原因,根据官方文档说明,这样配置可以与解决方法2共存。下面我们来看看方法2。
解决办法2:
<mvc:resources mapping="/css/**" location="WEB-INF/css/" />
location:对应是根路径
mapping:映射是访问路径
通过http://localhost:8080/css/index.css就可以访问到被拦截的资源了。这种方式能解决方法1的局限情况。
总结
做个总结吧,我推荐这种方式2来解决访问静态资源拦截问题,我觉得方法1可以不写,就按方法2做配置,够用了。方法2可能配置的多一些,但是看起来比较清晰,更容易理解。谢谢童鞋们的观看,如果喜欢或有疑惑,请点赞和留言哦!我是叫练,边叫边练。
- default-servlet-handler不生效原因,springmvc静态资源拦截方案比较
- SpringMVC 处理静态资源 <mvc:default-servlet-handler/>
- <mvc:default-servlet-handler />过滤器拦截静态资源
- SpringMVC系列(十)<mvc:default-servlet-handler/>(处理静态资源)和<mvc:annotation-driven />
- SpringMVC——静态资源访问之<mvc:annotation-driven/>与<mvc:default-servlet-handler/>
- <mvc:default-servlet-handler/>不拦截静态资源的前提条件
- Spring MVC静态资源处理<mvc:resources><mvc:default-servlet-handler>
- Spring MVC静态资源处理default-servlet-handler和resources的区别
- 架构搭起后 为了实现 对静态资源文件的访问 spring_mvc.xml 添加<mvc:default-servlet-handler /> 但却再也无法访问到controller
- Spring MVC静态资源处理----<mvc:default-servlet-handler />和<mvc:resources />
- Spring MVC静态资源处理——<mvc:resources /> ||<mvc:default-servlet-handler />
- Spring MVC静态资源处理——<mvc:resources /> ||<mvc:default-servlet-handler /> 转载
- <mvc:default-servlet-handler />不能同时访问静态资源和动态资源的问题
- 配置了<mvc:default-servlet-handler />还是不能访问静态资源
- 为什么spring默认对静态文件的过滤不生效 default-servlet-handler
- Spring MVC静态资源处理——<mvc:resources /> ||<mvc:default-servlet-handler />
- 添加<mvc:default-servlet-handler/>后,静态资源可以访问,Controller不能访问。
- 为什么静态资源访问要加mvc:default-servlet-handler和mvc:annotation-drive
- 0055 <mvc:default-servlet-handler />不能同时访问静态资源和动态资源的问题
- SpringMVC使用<mvc:default-servlet-handler/>可以访问静态资源,但是导致Controller访问失败