一、
springMVC的拦截器有两种实现方法,这里是使用springMVC 3.0:
1、实现接口:org.springframework.web.servlet.HandlerInterceptor:
2、继承适配器:org.springframework.web.servlet.handler.HandlerInterceptorAdapter这个适配器实现了HandlerInterceptor接口。
提供了这个接口中所有方法的空实现。
package com.springmvc.util;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class SpingInterceptor implements HandlerInterceptor{
/*1、Object obj是指下一个拦截器该方法;
*2、在action执行前执行,可以实现对数据的预处理,比如:编码、安全控制等。如果方法返回true,则继续执行action。*/
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse res,Object obj) throws Exception {
System.out.println("before action excute !!!");
return true; //继续执行action
}
/*1、Object obj是指下一个拦截器
*2、 该方法在action执行后,生成视图前执行。在这里,我们有机会修改视图层数据。
* */
@Override
public void postHandle(HttpServletRequest req, HttpServletResponse res,Object obj, ModelAndView mv) throws Exception {
System.out.println("after Action excute,before view create!!!");
}
/*1、Object obj是指下一个拦截器
*2、最后执行,通常用于释放资源,处理异常。我们可以根据exp是否为空,来进行相关的异常处理。因为我们在平时处理异常时,
*都是从底层向上抛出异常,最后到了spring框架从而到了这个方法中。
* */
@Override
public void afterCompletion(HttpServletRequest req,HttpServletResponse res, Object obj, Exception exp)throws Exception {
System.out.println("afterComletion,use to release some resources!!!");
}
}
二、在
springmvc-servlet中配置拦截器:
<!--配置拦截器 -->
<mvc:interceptors>
<!-- <bean class="com.springmvc.util.SpingInterceptor"></bean>写在这里表示拦截所有springmvc的url! -->
<mvc:interceptor>
<mvc:mapping path="/user/upload"/>
<bean class="com.springmvc.util.SpingInterceptor"></bean><!-- 表示只拦截 /user/upload这个url-->
</mvc:interceptor>
</mvc:interceptors>