zl程序教程

您现在的位置是:首页 >  后端

当前栏目

SpringMVC中拦截/和拦截/*的区别详解编程语言

SpringMVC编程语言 详解 区别 拦截
2023-06-13 09:20:31 时间

新建一个spring项目发现无法访问到jsp页面,静态html也无法访问,终于找到答案,原来是spring拦截配置的不对,一直写的是这种配置,今天发现是不对的,好在找到了答案:)

 servlet-mapping 

 servlet-name springmvc /servlet-name 

 url-pattern /* /url-pattern 

 /servlet-mapping 

 一、我们都知道在基于Spring的Application中,需要在web.xml中增加下面类似的配置信息:

SpringMVC中拦截/和拦截/*的区别 

 特点: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 ,  使用方法:

 SpringMVC中拦截/和拦截/*的区别 

会把 /** 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