Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。、
1.创建拦截器类实现HandlerInterceptor接口
public boolean preHandle(HttpServletRequest request, HttpServletResponse
response, Object handler) {
System.out.println("preHandle running...");
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse
response, Object handler, ModelAndView modelAndView) {
System.out.println("postHandle running...");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse
response, Object handler, Exception ex) {
System.out.println("afterCompletion running...");
}
}
2. 配置拦截器
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="interceptor.MyHandlerInterceptor1"/>
</mvc:interceptor>
</mvc:interceptors>
3.测试拦截器
@ResponseBody
public ModelAndView quickMethod() throws IOException, ParseException {
System.out.println("目标方法执行....");
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("name","itcast");
modelAndView.setViewName("index");
return modelAndView;
}
4.运行结果
仔细观察执行顺序可知,先执行prehandle方法,再执行视图,再执行posthandle,再执行afterCompletion方法。多个拦截器根据web的配置文件顺序执行。