springmvc的处理器拦截器类似于servlet开发中的过滤器Filter,对于处理进行预处理和后处理
过滤器是servlet的一部分,任何javaweb都可以使用
拦截器是springmvc框架自己的,只有使用springmvc框架才可以使用
过滤器在配置了/*之后会对所有的资源进行拦截
拦截器只会拦截控制器中的方法,如果访问jsp,html,css,image,或者js不会被拦截
拦截器的是基于反射,过滤器基于方法回调
拦截器是AOP思想的具体应用,要是使用拦截器,必须 实现HandlerInterceptor接口
编写逻辑
@RequestMapping("interceptor1")
public ModelAndView interceptors(ModelAndView modelAndView,
HttpServletRequest request,
HttpServletResponse response){
System.out.println("这里正在执行逻辑");
modelAndView.addObject("name","张三");
modelAndView.setViewName("success");
return modelAndView;
}
编写处理器拦截器
public class MyHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest,
HttpServletResponse
httpServletResponse, Object o) throws Exception {
System.out.println("拦截器执行_之前");
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse,
Object o, ModelAndView modelAndView) throws Exception {
System.out.println("拦截器执行_之中");
modelAndView.addObject("name","李四");
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse,
Object o, Exception e) throws Exception {
System.out.println("拦截器执行_之后");
}
}
编写配置文件
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/不被拦截的路径"/>
<bean class="com.mvc.interceptors.MyHandlerInterceptor1"/>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/不被拦截的路径"/>
<bean class="com.mvc.interceptors.MyHandlerInterceptor2"/>
</mvc:interceptor>
</mvc:interceptors>