springmvc为何要拦截静态资源?
简单来讲,为了请求的url不带相似*.action,*.do,好比http://localhost:8080/system/index.action,spring团队统一风格,而web项目配置的web.xml中,全部请求都必须走过DispatcherServlet,固然就包括了静态资源,好比http://localhost:8080/html/index.html,为了解决这个问题,spring给了两种方案,下面咱们一块儿来讨论下两种方案的使用和区别,给新手同窗们一个很自白,清晰的认识!css
解决办法
说解决办法以前,咱先来聊下web项目的结构,以下图所示,你们能够看到默认webapp下有个WEB-INF文件夹,这个文件夹是提高文件安全级别的,若是不设置,是访问不到的,因此你们通常看到的资源文件(jsp,css,jss)都在WEB-INF文件夹下。html
解决办法1:
若是项目是这样配置的,你访问不到WEB-INF/css/下的文件,由于springmvc上下文定义了一个DefaultServletHttpRequestHandler用于处理静态文件的,他作的工做是转发给Spring默认处理器DispatcherServlet,DispatcherServlet能处理webapp下没有权限目录文件,它不能处理WEB-INF文件夹,也就是说你配置了,你可以访问html下的文件,可是你访问不了WEB-INF/css/下的文件,这多是文件夹权限缘由,根据官方文档说明,这样配置能够与解决方法2共存。下面咱们来看看方法2。web
解决办法2:
location:对应是根路径spring
mapping:映射是访问路径安全
经过http://localhost:8080/css/index.css就能够访问到被拦截的资源了。这种方式能解决方法1的局限状况。mvc
总结
作个总结吧,我推荐这种方式2来解决访问静态资源拦截问题,我以为方法1能够不写,就按方法2作配置,够用了。方法2可能配置的多一些,可是看起来比较清晰,更容易理解。谢谢童鞋们的观看,若是喜欢或有疑惑,请点赞和留言哦!我是叫练,边叫边练。app