文章目录
-
- 1.拦截器的作用
- 2拦截器和过滤器的区别
- 3.拦截器快速入门
-
- 1.创建拦截器类实现HandlerInterceptor接口
- 2.配置拦截器
- 3.测试拦截器的拦截效果
- 拦截器执行原理
- 对返回内容的修改
- 多个拦截器执行流程
# SpringMVC拦截器
1.拦截器的作用
类似于Servlet中的过滤器filter,用于对处理器进行预处理和后处理
将拦截器按一定的顺序链接成一条链,称为拦截器链,在访问被拦截的方法和字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用,也是AOP思想的体现。
2拦截器和过滤器的区别
3.拦截器快速入门
1.创建拦截器类实现HandlerInterceptor接口
public class MyInterceptor implements HandlerInterceptor {
//在目标方法执行之前执行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandler....");
return true;//代表拦截器开关是否打开。
}
//在目标方法执行之后,视图返回之前执行
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandler....");
}
//在整个流程执行完毕执行
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterHandler....");
}
}
2.配置拦截器
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.bao.intercepetoor.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
3.测试拦截器的拦截效果
拦截器执行原理
随着拦截器的执行,首先会访问preHandle方法,如果其返回结果为false,则会被拦截,不会执行相应的操作。当返回值为true时,则会执行目标资源,并且执行posthandle和afterhandle方法
对参数内容判断
System.out.println("preHandler....");
String param = request.getParameter("param");
if ("yes".equals(param)) {
return true;
}else {
request.getRequestDispatcher("/error.jsp").forward(request,response);
return false;
}
对返回内容的修改
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
modelAndView.addObject("name","itcast");
System.out.println("postHandler....");
}
多个拦截器执行流程
定义在前面的拦截器先执行,定义在后面的先返回。