天天看点

SSM学习----SpringMVC之拦截器的使用

文章目录

    • 1.拦截器的作用
    • 2拦截器和过滤器的区别
    • 3.拦截器快速入门
      • 1.创建拦截器类实现HandlerInterceptor接口
      • 2.配置拦截器
      • 3.测试拦截器的拦截效果
    • 拦截器执行原理
    • 对返回内容的修改
    • 多个拦截器执行流程

# SpringMVC拦截器

1.拦截器的作用

类似于Servlet中的过滤器filter,用于对处理器进行预处理和后处理

将拦截器按一定的顺序链接成一条链,称为拦截器链,在访问被拦截的方法和字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用,也是AOP思想的体现。

2拦截器和过滤器的区别

SSM学习----SpringMVC之拦截器的使用

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.测试拦截器的拦截效果

SSM学习----SpringMVC之拦截器的使用

拦截器执行原理

随着拦截器的执行,首先会访问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....");

}
           

多个拦截器执行流程

定义在前面的拦截器先执行,定义在后面的先返回。

SSM学习----SpringMVC之拦截器的使用
SSM学习----SpringMVC之拦截器的使用