SpringMVC中拦截/和拦截/*的区别详解编程语言
新建一个spring项目发现无法访问到jsp页面,静态html也无法访问,终于找到答案,原来是spring拦截配置的不对,一直写的是这种配置,今天发现是不对的,好在找到了答案:)
servlet-mapping servlet-name springmvc /servlet-name url-pattern /* /url-pattern /servlet-mapping
一、我们都知道在基于Spring的Application中,需要在web.xml中增加下面类似的配置信息:
特点:1. 要配置多个,每种文件配置一个。
2. 要写在DispatcherServlet的前面, 让 defaultServlet先拦截请求,这样请求就不会进入Spring了。
3. 高性能。
备注:
Tomcat, Jetty, JBoss, and GlassFish 自带的默认Servlet的名字 default
Google App Engine 自带的 默认Servlet的名字 _ah_default
Resin 自带的 默认Servlet的名字 resin-file
WebLogic 自带的 默认Servlet的名字 FileServlet
WebSphere 自带的 默认Servlet的名字 SimpleFileServlet
方案二: 在spring3.0.4以后版本提供了mvc:resources , 使用方法:
会把 /** url,注册到SimpleUrlHandlerMapping的urlMap中,把对静态资源的访问由HandlerMapping转到 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler 处理并返回.
DefaultServletHttpRequestHandler使用就是各个Servlet容器自己的默认Servlet.
补充说明:多个HandlerMapping的执行顺序问题:
DefaultAnnotationHandlerMapping的order属性值是:0
SPAN >
自动注册 的SimpleUrlHandlerMapping 的order属性值是: 2147483647
spring会先执行order值比较小的。当访问一个a.jpg图片文件时,先通过 DefaultAnnotationHandlerMapping 来找处理器,一定是找不到的,因为我们没有叫a.jpg的Action。然后再按order值升序找,由于最后一个 SimpleUrlHandlerMapping 是匹配 /** 的,所以一定会匹配上,就可以响应图片。 访问一个图片,还要走层层匹配。不知性能如何?
最后再说明一下,方案二、方案三 在访问静态资源时,如果有匹配的(近似)总拦截器,就会走拦截器。如果你在拦截中实现权限检查,要注意过滤这些对静态文件的请求。
如何你的DispatcherServlet拦截 *.do这样的URL后缀,就不存上述问题了。还是有后缀方便。
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/11233.html
cgojavaxml相关文章
- springmvc基础篇—掌握三种处理器详解编程语言
- SpringMVC上传下载详解编程语言
- springMVC入门项目demo详解编程语言
- springmvc+maven框架介绍详解编程语言
- springMVC笔记二详解编程语言
- springMVC笔记一详解编程语言
- SpringMVC详解(五)——参数绑定编程语言
- SpringMVC详解(二)——详细架构编程语言
- SpringMVC配置数据库连接池详解编程语言
- SpringMVC配置详解编程语言
- springMVC上传多个文件带参数详解编程语言
- SpringMVC使用ModelAndView进行重定向详解编程语言
- SpringMVC的上传和下载详解编程语言
- SpringMVC的拦截器详解编程语言
- SpringMVC的Action在同一时间里只允许同一个浏览器的单次进入详解编程语言
- springmvc session和model解析详解编程语言
- springmvc 静态资源访问详解编程语言
- SpringMVC拦截器的使用详解编程语言
- springmvc拦截器配置详解编程语言