当前位置:首页 » 资源管理 » 拦截器如何不访问静态资源
扩展阅读
厕所砸砖用什么工具 2025-05-20 17:04:21
在家没有工具怎么砍竹 2025-05-20 17:03:02
干洗石油剂什么性质 2025-05-20 16:31:20

拦截器如何不访问静态资源

发布时间: 2022-05-03 07:14:27

‘壹’ servlet filter和springMVC拦截器的区别

在struts2中用过filter过滤器,在springmvc中还有拦截器,它们都能过滤请求,但是到底有什么区别呢?
一、定义

拦截器 :是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。
过滤器:是在javaweb中,你传入的request、response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符.。
二、xml文件配置
1.filter
该过滤器的方法是创建一个类XXXFilter实现此接口,并在该类中的doFilter方法中声明过滤规则,然后在配置文件web.xml中声明他所过滤的路径

<filter>
<filter-name>XXXFilter</filter-name>
<filter-class>
com.web.util.XXXFilter
</filter-class>
</filter>

<filter-mapping>
<filter-name>XXXFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter>
<filter-name>XXXFilter</filter-name>
<filter-class>
com.web.util.XXXFilter
</filter-class>
</filter>

<filter-mapping>
<filter-name>XXXFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
2.Interceptor

它也要实现HandlerInterceptor 接口,这里只介绍方法注解配置

<!-- 拦截器 -->
<mvc:interceptors>
<!-- 多个拦截器,顺序执行 -->
<mvc:interceptor>
<mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,将拦截所有的Controller -->
<bean class="com.wy.interceptor.CommonInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
<!-- 拦截器 -->
<mvc:interceptors>
<!-- 多个拦截器,顺序执行 -->
<mvc:interceptor>
<mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,将拦截所有的Controller -->
<bean class="com.wy.interceptor.CommonInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>

三、具体区别

filter
Interceptor

多个的执行顺序
根据filter mapping配置的先后顺序
按照配置的顺序,但是可以通过order控制顺序

规范
在Servlet规范中定义的,是Servlet容器支持的
Spring容器内的,是Spring框架支持的。

使用范围
只能用于Web程序中
既可以用于Web程序,也可以用于Application、Swing程序中。

深度
Filter在只在Servlet前后起作用
拦截器能够深入到方法前后、异常抛出前后等

四、总结
两者的本质区别:拦截器是基于java的反射机制的,而过滤器是基于函数回调。从灵活性上说拦截器功能更强大些,Filter能做的事情,他都能做,而且可以在请求前,请求后执行,比较灵活。Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的话,还是建议用interceptor。不过还是根据不同情况选择合适的。

‘贰’ SpringMVC 拦截器问题

mvc:exclude-mapping 标签不被spring-mvc-3.0.xsd支持,该配置在spring-mvc-3.2.xsd中,可以通过http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd获取,因此需要在spring-mvc-3.0.xsd文件中增加该标签,处理办法很简单,从网上下载spring-mvc-3.2.xsd,找到标签后,再找到spring.web.servlet-3.0.5.jar中的spring-mvc-3.0.xsd文件,将标签加入即可

‘叁’ springmvc怎么在拦截页面

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

此处需要特别强调的是 /使用的是/,而不是/*,如果使用/*,那么请求时可以通过DispatcherServlet转发到相应的Action或者Controller中的,但是返回的内容,如返回的jsp还会再次被拦截,这样导致404错误,即访问不到jsp。所以如果以后发现总是有404错误的时候,别忘了check一下 /的配置是否是/*.
二、其实Spring 的Servlet拦截器匹配规则(即 ... )都可以自己定义,例:当映射为@RequestMapping("/user/add")时
1、拦截*.do、*.htm, 例如:/user/add.do
这是最传统的方式,最简单也最实用。不会导致静态文件(jpg,js,css)被拦截。
2、拦截/,例如:/user/add
可以实现现在很流行的REST风格。很多互联网类型的应用很喜欢这种风格的URL。
弊端:会导致静态文件(jpg,js,css)被拦截后不能正常显示。想实现REST风格,事情就是麻烦一些。后面有解决办法还算简单。
3、拦截/*,这是一个错误的方式,请求可以走到Action中,但转到jsp时再次被拦截,不能访问到jsp。
三、如何访问到静态的文件,如jpg,js,css?
如果你的DispatcherServlet拦截"*.do"这样的有后缀的URL,就不存在访问不到静态资源的问题。

如果你的DispatcherServlet拦截"/",为了实现REST风格,拦截了所有的请求,那么同时对*.js,*.jpg等静态文件的访问也就被拦截了。

我们要解决这个问题。
目的:可以正常访问静态文件,不可以找不到静态文件报404。
方案一:激活Tomcat的defaultServlet来处理静态文件

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

images/**映射到 ResourceHttpRequestHandler进行处理,location指定静态资源的位置.可以是web application根目录下、jar包里面,这样可以把静态资源压缩到jar包中。cache-period 可以使得静态资源进行web cache

如果出现下面的错误,可能是没有配置的原因。
报错WARNING: No mapping found for HTTP request with URI [/mvc/user/findUser/lisi/770] in DispatcherServlet with name 'springMVC'

使用元素,把mapping的URI注册到SimpleUrlHandlerMapping的urlMap中,
key为mapping的URI pattern值,而value为ResourceHttpRequestHandler,
这样就巧妙的把对静态资源的访问由HandlerMapping转到ResourceHttpRequestHandler处理并返回,所以就支持classpath目录,jar包内静态资源的访问.
另外需要注意的一点是,不要对SimpleUrlHandlerMapping设置defaultHandler.因为对static uri的defaultHandler就是ResourceHttpRequestHandler,
否则无法处理static resources request.
方案三 ,使用

会把"/**" url,注册到SimpleUrlHandlerMapping的urlMap中,把对静态资源的访问由HandlerMapping转到 org.springframework.web.servlet.resource. 处理并返回.
使用就是各个Servlet容器自己的默认Servlet.
补充说明:多个HandlerMapping的执行顺序问题:
的order属性值是:0

<<SPAN class="Apple-converted-space"> mvc:resources/ > 自动注册的 SimpleUrlHandlerMapping 的order属性值是: 2147483646
自动注册 的SimpleUrlHandlerMapping 的order属性值是: 2147483647
spring会先执行order值比较小的。当访问一个a.jpg图片文件时,先通过 来找处理器,一定是找不到的,因为我们没有叫a.jpg的Action。然后再按order值升序找,由于最后一个 SimpleUrlHandlerMapping 是匹配 "/**"的,所以一定会匹配上,就可以响应图片。 访问一个图片,还要走层层匹配。不知性能如何?
最后再说明一下,方案二、方案三 在访问静态资源时,如果有匹配的(近似)总拦截器,就会走拦截器。如果你在拦截中实现权限检查,要注意过滤这些对静态文件的请求。
如何你的DispatcherServlet拦截 *.do这样的URL后缀,就不存上述问题了。还是有后缀方便。

‘肆’ SpringMVC框架,controller层返回页面不能访问静态资源的问题。

如果你的spring-mvc配置了请求拦截器,那你可以用转发的方法跳转到你想要的页面,这是请求拦截:

‘伍’ springMVC的拦截器不拦截直接访问jsp的请求

你好,分享一下我的拦截器,多多指教,代码如下:

在spring的配置文件里面进行配置拦截器

<!-- 拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 对所有的请求拦截使用/**-->
<mvc:mapping path="/**" />
<ref bean="userAccessInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
<bean id="userAccessInterceptor"class="com.web.interceptor.UserAccessInterceptor"></bean>

拦截器如下设置,当用户未登录时,返回到登录页面
class UserAccessInterceptor extends HandlerInterceptorAdapter {

@Override
public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
//静态资源直接return true
if(handler instanceof ResourceHttpRequestHandler){
return true;
}
if(Utils.isNull(UserCookie.getApploginUserId())){
response.sendRedirect(request.getContextPath()+"/login.jsp");
return false;
}
return true;
}

‘陆’ Spring中拦截/和拦截/*的区别

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

<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<!-- Spring MVC Servlet -->

<servlet>
<servlet-name>servletName</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>servletName</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
此处需要特别强调的是 <url-pattern>/</url-pattern>使用的是/,而不是/*,如果使用/*,那么请求时可以通过DispatcherServlet转发到相应的Action或者Controller中的,但是返回的内容,如返回的jsp还会再次被拦截,这样导致404错误,即访问不到jsp。所以如果以后发现总是有404错误的时候,别忘了check一下 <url-pattern>/</url-pattern>的配置是否是/*.

二、其实Spring 的Servlet拦截器匹配规则(即 <url-pattern>...</url-pattern> )都可以自己定义,例:当映射为@RequestMapping("/user/add")时

1、拦截*.do、*.htm, 例如:/user/add.do

这是最传统的方式,最简单也最实用。不会导致静态文件(jpg,js,css)被拦截。

2、拦截/,例如:/user/add

可以实现现在很流行的REST风格。很多互联网类型的应用很喜欢这种风格的URL。

弊端:会导致静态文件(jpg,js,css)被拦截后不能正常显示。想实现REST风格,事情就是麻烦一些。后面有解决办法还算简单。

3、拦截/*,这是一个错误的方式,请求可以走到Action中,但转到jsp时再次被拦截,不能访问到jsp。

三、如何访问到静态的文件,如jpg,js,css?

如果你的DispatcherServlet拦截"*.do"这样的有后缀的URL,就不存在访问不到静态资源的问题。

如果你的DispatcherServlet拦截"/",为了实现REST风格,拦截了所有的请求,那么同时对*.js,*.jpg等静态文件的访问也就被拦截了。

我们要解决这个问题。

目的:可以正常访问静态文件,不可以找不到静态文件报404。

方案一:激活Tomcat的defaultServlet来处理静态文件

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
特点: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 , 使用方法:

<!-- 对静态资源文件的访问 -->
<mvc:resources mapping="/images/**" location="/images/" />
images/**映射到 ResourceHttpRequestHandler进行处理,location指定静态资源的位置.可以是web application根目录下、jar包里面,这样可以把静态资源压缩到jar包中。cache-period 可以使得静态资源进行web cache


如果出现下面的错误,可能是没有配置<mvc:annotation-driven />的原因。
报错WARNING: No mapping found for HTTP request with URI [/mvc/user/findUser/lisi/770] in DispatcherServlet with name 'springMVC'使用<mvc:resources/>元素,把mapping的URI注册到SimpleUrlHandlerMapping的urlMap中,
key为mapping的URI pattern值,而value为ResourceHttpRequestHandler,
这样就巧妙的把对静态资源的访问由HandlerMapping转到ResourceHttpRequestHandler处理并返回,所以就支持classpath目录,jar包内静态资源的访问.
另外需要注意的一点是,不要对SimpleUrlHandlerMapping设置defaultHandler.因为对static uri的defaultHandler就是ResourceHttpRequestHandler,
否则无法处理static resources request.

方案三 ,使用<mvc:default-servlet-handler/>

<mvc:default-servlet-handler/>
会把"/**" url,注册到SimpleUrlHandlerMapping的urlMap中,把对静态资源的访问由HandlerMapping转到 org.springframework.web.servlet.resource. 处理并返回.
使用就是各个Servlet容器自己的默认Servlet.

补充说明:多个HandlerMapping的执行顺序问题:

的order属性值是:0

< mvc:resources/ > 自动注册的 SimpleUrlHandlerMapping 的order属性值是: 2147483646

<mvc:default-servlet-handler/>自动注册 的SimpleUrlHandlerMapping 的order属性值是: 2147483647

spring会先执行order值比较小的。当访问一个a.jpg图片文件时,先通过 来找处理器,一定是找不到的,因为我们没有叫a.jpg的Action。然后再按order值升序找,由于最后一个 SimpleUrlHandlerMapping 是匹配 "/**"的,所以一定会匹配上,就可以响应图片。 访问一个图片,还要走层层匹配。不知性能如何?

最后再说明一下,方案二、方案三 在访问静态资源时,如果有匹配的(近似)总拦截器,就会走拦截器。如果你在拦截中实现权限检查,要注意过滤这些对静态文件的请求。

如何你的DispatcherServlet拦截 *.do这样的URL后缀,就不存上述问题了。还是有后缀方便。

‘柒’ springmvc有哪些拦截器

1.DispatcherServlet

SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServlet。
DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller来处理。 所以我们现在web.xml中加入以下配置:

[html]view plainprint?

<!--初始化DispatcherServlet时,该框架在web应用程序WEB-INF目录中寻找一个名为[servlet-名称]-servlet.xml的文件,

并在那里定义相关的Beans,重写在全局中定义的任何Beans-->

<servlet>

<servlet-name>springMybatis</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>springMybatis</servlet-name>

<!--所有的的请求,都会被DispatcherServlet处理-->

<url-pattern>/</url-pattern>

</servlet-mapping>


2.静态资源不拦截

如果只配置拦截类似于*.do格式的url,则对静态资源的访问是没有问题的,但是如果配置拦截了所有的请求(如我们上面配置的“/”),就会造成js文件、css文件、图片文件等静态资源无法访问。
一般实现拦截器主要是为了权限管理,主要是拦截一些url请求,所以不对静态资源进行拦截。要过滤掉静态资源一般有两种方式,
第一种是采用<mvc:default-servlet-handler />,(一般Web应用服务器默认的Servlet名称是"default",所以这里我们激活Tomcat的defaultServlet来处理静态文件,在web.xml里配置如下代码即可:)

[html]view plainprint?

<!--该servlet为tomcat,jetty等容器提供,将静态资源映射从/改为/static/目录,如原来访问http://localhost/foo.css,现在http://localhost/static/foo.css-->

<!--不拦截静态文件-->

<servlet-mapping>

<servlet-name>default</servlet-name>

<url-pattern>/js/*</url-pattern>

<url-pattern>/css/*</url-pattern>

<url-pattern>/images/*</url-pattern>

<url-pattern>/fonts/*</url-pattern>

</servlet-mapping>


Tomcat, Jetty, JBoss, and GlassFish 默认 Servlet的名字 -- "default"
Resin 默认 Servlet的名字 -- "resin-file"
WebLogic 默认 Servlet的名字 -- "FileServlet"
WebSphere 默认 Servlet的名字 -- "SimpleFileServlet"

如果你所有的Web应用服务器的默认Servlet名称不是"default",则需要通过default-servlet-name属性显示指定:

[html]view plainprint?

<mvc:default-servlet-handlerdefault-servlet-name="所使用的Web服务器默认使用的Servlet名称"/>


第二种是采用<mvc:resources />,在springmvc的配置文件中加入以下代码:

[html]view plainprint?

<mvc:resourcesmapping="/js/**"location="/static_resources/javascript/"/>

<mvc:resourcesmapping="/styles/**"location="/static_resources/css/"/>

<mvc:resourcesmapping="/images/**"location="/static_resources/images/"/>


3.自定义拦截器

SpringMVC的拦截器HandlerInterceptorAdapter对应提供了三个preHandle,postHandle,afterCompletion方法。preHandle在业务处理器处理请求之前被调用,
postHandle在业务处理器处理请求执行完成后,生成视图之前执行,afterCompletion在DispatcherServlet完全处理完请求后被调用,可用于清理资源等 。所以要想实现自己的权限管理逻辑,需要继承HandlerInterceptorAdapter并重写其三个方法。
首先在springmvc.xml中加入自己定义的拦截器我的实现逻辑CommonInterceptor,

[html]view plainprint?

<!--配置拦截器,多个拦截器,顺序执行-->

<mvc:interceptors>

<mvc:interceptor>

<!--匹配的是url路径,如果不配置或/**,将拦截所有的Controller-->

<mvc:mappingpath="/"/>

<mvc:mappingpath="/user/**"/>

<mvc:mappingpath="/test/**"/>

<beanclass="com.alibaba.interceptor.CommonInterceptor"></bean>

</mvc:interceptor>

<!--当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法-->

</mvc:interceptors>



我的拦截逻辑是“在未登录前,任何访问url都跳转到login页面;登录成功后跳转至先前的url”,具体代码如下:

[java]view plainprint?

/**

*

*/

packagecom.alibaba.interceptor;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importorg.slf4j.Logger;

importorg.slf4j.LoggerFactory;

importorg.springframework.web.servlet.ModelAndView;

importorg.springframework.web.servlet.handler.HandlerInterceptorAdapter;

importcom.alibaba.util.RequestUtil;

/**

*@authortfj

*2014-8-1

*/

{

privatefinalLoggerlog=LoggerFactory.getLogger(CommonInterceptor.class);

publicstaticfinalStringLAST_PAGE="com.alibaba.lastPage";

/*

*利用正则映射到需要拦截的路径

privateStringmappingURL;

publicvoidsetMappingURL(StringmappingURL){

this.mappingURL=mappingURL;

}

*/

/**

*在业务处理器处理请求之前被调用

*如果返回false

*从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链

*如果返回true

*执行下一个拦截器,直到所有的拦截器都执行完毕

*再执行被拦截的Controller

*然后进入拦截器链,

*从最后一个拦截器往回执行所有的postHandle()

*接着再从最后一个拦截器往回执行所有的afterCompletion()

*/

@Override

publicbooleanpreHandle(HttpServletRequestrequest,

HttpServletResponseresponse,Objecthandler)throwsException{

if("GET".equalsIgnoreCase(request.getMethod())){

RequestUtil.saveRequest();

}

log.info("==============执行顺序:1、preHandle================");

StringrequestUri=request.getRequestURI();

StringcontextPath=request.getContextPath();

Stringurl=requestUri.substring(contextPath.length());

log.info("requestUri:"+requestUri);

log.info("contextPath:"+contextPath);

log.info("url:"+url);

Stringusername=(String)request.getSession().getAttribute("user");

if(username==null){

log.info("Interceptor:跳转到login页面!");

request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);

returnfalse;

}else

returntrue;

}

/**

*在业务处理器处理请求执行完成后,生成视图之前执行的动作

*可在modelAndView中加入数据,比如当前时间

*/

@Override

publicvoidpostHandle(HttpServletRequestrequest,

HttpServletResponseresponse,Objecthandler,

ModelAndViewmodelAndView)throwsException{

log.info("==============执行顺序:2、postHandle================");

if(modelAndView!=null){//加入当前时间

modelAndView.addObject("var","测试postHandle");

}

}

/**

*在DispatcherServlet完全处理完请求后被调用,可用于清理资源等

*

*当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion()

*/

@Override

publicvoidafterCompletion(HttpServletRequestrequest,

HttpServletResponseresponse,Objecthandler,Exceptionex)

throwsException{

log.info("==============执行顺序:3、afterCompletion================");

}

}

注:上述代码里我写了一个RequestUtil,主要实现获取当前Request、Session对象,保存和加密页面,取出等功能。

至此,拦截器已经实现了,效果如图:

我直接访问/test/hello,会被拦截

‘捌’ 使用springMVC的拦截器验证登录时,拦截器拦截了静态的资源该怎么解决

springmvc拦截器定义后,还需要在springmvc框架的配置文件中注册,同时设置拦截的url路径,即会造成对controller拦截的同时也对访问的js和css文件进行拦截,可以通过配置不拦截js和css,例子如下

js和css放在web应用的static目录下

<mvc:interceptors>
<mvc:interceptor>
<mvc:mappingpath="/**"/>
<mvc:exclude-mappingpath="/static/**"/>--设置不拦截static下资源
<beanclass="cn.sxt.rbac.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mappingpath="/**"/>
<mvc:exclude-mappingpath="/static/**"/>--设置不拦截static下资源
<beanclass="cn.sxt.rbac.interceptor.UrlInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>

这样在拦截controller同时,不会对static里面的js、css或者其他静态图片资源进行拦截。

‘玖’ spring mvc的静态资源拦截器怎么配置

初学者基本上使用1,2,3方案:

  1. 所有请求全部拦截,都在spring mvc 处理,静态资源如下配置

    <mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"/>

  2. 所有请求全部拦截,但是在web.xml中添加对静态资源的默认访问,如下

    <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>

  3. 所有请求全部拦截,在springmvc配置文件中添加如下,这种方式对spring版本必须要求3.0.5及以上。

    <mvc:default-servlet-handler/>

  4. 然后是我极力推荐的一种,web.xml中配置DispatcherServlet的时候mapping如下配置,url-pattern不要全部拦截,把需要springmvc处理的请求添加自定义头。这种方法性能最好。

    <servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/自定义</url-pattern>
    </servlet-mapping>

‘拾’ Spring mvc 中,怎么用注解配置静态资源不需要被控制器调用

Spring MVC搭建项目的时候,想使用html页面作为前端的视图,你会发现html页面不能访问,原因是由于Spring拦截器将其拦截寻找控制器的缘故,解决办法就是配置静态资源:

1 <mvc:resources mapping="/js/*.js" location="/js/" />
2 <mvc:resources mapping="/**/*.html" location="/html/" />
3 <!-- <mvc:resources location="/" mapping="/**/*.html"/>
4 <mvc:resources location="/" mapping="/**/*.js"/>
5 <mvc:resources location="/" mapping="/**/*.css"/>
6 <mvc:resources location="/" mapping="/**/*.png"/>
7 <mvc:resources location="/" mapping="/**/*.gif"/> -->