一. 拦截器

 1. 简介

 拦截器( Interceptor)是一种动态拦截方法调用的机制

 作用:① 在指定的方法调用前后执行预先设定后的的代码   ②阻止原始方法的执行

 核心原理: AOP思想

 拦截器链:多个拦截器按照一定的顺序,对原始被调用功能进行增强

PS:拦截器  VS  过滤器

 归属不同: Filter属于Servlet技术, Interceptor属于SpringMVC技术

 拦截内容不同: Filter对所有访问进行增强, Interceptor仅针对SpringMVC的访问进行增强

第十六节:SpringMvc拦截器、全局异常处理、RestFul风格编程、文件上传

2. 实战开发-单拦截器

(1). 新建拦截器类 MyInterceptor1,实现 HandlerInterceptor接口,然后override三个方法,分别是:preHandle、postHandle、afterCompletion。

A. 前置处理方法preHandle

 //处理器运行之前执行
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        System.out.println("前置运行----a1");
        //返回值为false将拦截原始处理器的运行
        //如果配置多拦截器,返回值为false将终止当前拦截器后面配置的拦截器的运行
        return true;
    }

参数剖析:

   request:请求对象。 response:响应对象。 handler:被调用的处理器对象,本质上是一个方法对象,对反射中的Method对象进行了再包装。

返回值

   返回值为false,被拦截的处理器将不执行,即执行完preHandle后,直接结束。后面的postHandle、afterCompletion统统不执行。

   返回值为true,继续往后执行。

B. 后置处理方法postHandle

   //处理器运行之后执行
    @Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response,
                           Object handler,
                           ModelAndView modelAndView) throws Exception {
        System.out.println("后置运行----b1");
    }

参数剖析:

 modelAndView:如果处理器执行完成具有返回结果,可以读取到对应数据与页面信息,并进行调整。

C. 完成处理方法afterCompletion

   //所有拦截器的后置执行全部结束后,执行该操作
    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response,
                                Object handler,
                                Exception ex) throws Exception {
        System.out.println("完成运行----c1");
    }

参数剖析:

 ex:如果处理器执行过程中出现异常对象,可以针对异常情况进行单独处理。

补充拦截器执行流程:

第十六节:SpringMvc拦截器、全局异常处理、RestFul风格编程、文件上传

分享全部代码:

//拦截器1
//自定义拦截器需要实现HandlerInterceptor接口
public class MyInterceptor1 implements HandlerInterceptor {


    //处理器运行之前执行
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        System.out.println("前置运行----a1");
        //返回值为false将拦截原始处理器的运行
        //如果配置多拦截器,返回值为false将终止当前拦截器后面配置的拦截器的运行
        return true;
    }

    //处理器运行之后执行
    @Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response,
                           Object handler,
                           ModelAndView modelAndView) throws Exception {
        System.out.println("后置运行----b1");
    }

    //所有拦截器的后置执行全部结束后,执行该操作
    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response,
                                Object handler,
                                Exception ex) throws Exception {
        System.out.println("完成运行----c1");
    }

    //三个方法的运行顺序为    preHandle -> postHandle -> afterCompletion
    //如果preHandle返回值为false,三个方法仅运行preHandle
}
View Code

相关文章:

  • 2021-04-20
  • 2022-12-23
  • 2021-04-06
  • 2021-10-05
  • 2022-12-23
  • 2022-12-23
  • 2022-01-20
  • 2021-05-26
猜你喜欢
  • 2022-12-23
  • 2021-09-11
  • 2022-12-23
  • 2022-01-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案