拦截器简介
Spring Web MVC的处理器拦截器
类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。
拦截器执行流程
入门案例
使用拦截器需要实现HandlerInterceptor接口,它有三个方法
preHandler:预处理方法,返回值true表示继续执行,false表示流程中断
postHandler:后处理方法
afterCompletion:请求处理完毕后执行的回调方法
//拦截器 public class FirstInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { System.out.println("first preHandler"); return true; } public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { System.out.println("first postHandler"); } public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { System.out.println("first afterCompletion"); } }
处理器代码
@Controller public class FirstController { @RequestMapping("/first") public String doFirst(){ System.out.println("doFirst"); return "index"; }
}
配置Springxml文件
<!--:参数方法名解析器--> <bean id="methodNameResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"/> <property name="suffix" value=".jsp"/> </bean> <!--扫描包下所有的被标注的类--> <context:component-scan base-package="day17Interceptor"/> <!--配置拦截器--> <mvc:interceptors> <!--配置第一个拦截器--> <mvc:interceptor> <!--拦截所有请求--> <mvc:mapping path="/**"/> <!--配置自定义拦截器--> <bean class="day17Interceptor.FirstInterceptor"/> </mvc:interceptor> </mvc:interceptors> <!--配置注解驱动--> <mvc:annotation-driven/>
访问:http://localhost:8080/first
结果:
如果需要定义多个拦截器就需要在<mvc:Interceptors>节点中在添加一个<mvc:Interceptor>子节点,例如
<!--配置拦截器--> <mvc:interceptors> <!--配置第一个拦截器--> <mvc:interceptor> <!--拦截所有请求--> <mvc:mapping path="/**"/> <!--配置自定义拦截器--> <bean class="day17Interceptor.FirstInterceptor"/> </mvc:interceptor> <!--配置第二个拦截器--> <mvc:interceptor> <!--拦截所有请求--> <mvc:mapping path="/**"/> <!--配置自定义拦截器--> <bean class="day17Interceptor.SecondInterceptor"/> </mvc:interceptor> </mvc:interceptors>