springmvc配置文件中
1 <!-- 自定义拦截器 --> 2 <mvc:interceptors> 3 <mvc:interceptor> 4 <!-- 2个*代表包含子目录 --> 5 <mvc:mapping path="/**/*.action"/> 6 <bean class="cn.study.springmvc.interceptor.MyHandlerInterceptor" /> 7 </mvc:interceptor> 8 </mvc:interceptors>
拦截器代码
自动以我们的拦截器,要实现org.springframework.web.servlet.HandlerInterceptor
1 public class MyHandlerInterceptor implements HandlerInterceptor{ 2 3 /** 4 * 前置方法,会在handler执行之前执行 5 */ 6 @Override 7 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 8 throws Exception { 9 System.out.println("前置方法 执行 。。。。。。。。"); 10 return true; 11 } 12 13 /** 14 * 后置方法,会在handler执行之后执行 15 */ 16 @Override 17 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, 18 ModelAndView modelAndView) throws Exception { 19 System.out.println("后置方法 执行 。。。。。。。。"); 20 } 21 22 /** 23 * 完成方法 24 */ 25 @Override 26 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, 27 Exception ex) throws Exception { 28 System.out.println("完成方法 执行 。。。。。。。。"); 29 } 30 31 }
总结:
l 拦截器的执行过程和Struts2的拦截器执行过程类似;
l 拦截器的前置方法是正序执行,如果其中一个返回false则请求返回;
l 拦截器的后置方法是倒序执行,后置方法只有在前置方法全部执行后才能被执行;
l 拦截器的完成方法是倒序执行,完成方法不仅是在最后执行,而且如果前置方法返回false也会被执行(已经通过执行的拦截器的完成方法)。