zoukankan      html  css  js  c++  java
  • 后端——框架——视图层框架——spring_mvc——《官网》阅读笔记——第一章节4(核心对象,拦截器)

    1、概念

      拦截器是由Spring提供,类似Filter功能的类,它可以拦截DispatcherServlet分发的请求。

      与Filter不同之处在于,Filter适用于所有Servlet,而拦截器(Interceptor)只适用于DispatcherServlet分发的请求。当同时有Filter,Interceptor存在的情况下,请求的执行链如下:

      Filter chain---->DispatcherServlet的doService方法------>获取HandlerExecutionChain,执行HandlerInterceptor chain----->Controller中的handler方法。

    2、HandlerInterceptor接口

      HandlerInterceptor有三个方法,

    1. preHandle:在Controller的handler方法之前执行,返回true时继续执行下一个Handler,若是最后一个Handler,则执行Controller中的方法。返回false时,表示请求终止,不会有任何后续。
    2. postHandle:在Controller的handler方法之后执行,当响应类型为数据流时,即直接向response对象的输出流写入数据时,例如调用response.getWriter.append方法,标注有@ResponseBody的handler。此方法不会执行。
    3. afterCompletion:在请求结束,响应关闭,线程资源被回收之后运行

    3、使用

      使用拦截器有两个步骤:

    1. 自定义HandlerInterceptor接口的实现类,例如TestInterceptor。
    2. 注册HandlerInterceptor,注册的方式有两种,代码方式,在配置文件中配置。

      编写HandlerInterceptor接口的实现类较为简单。只做练习的话,打印几条输出语句即可。

      注册的代码方式:

      实现WebMvcConfigurer接口,重写addInterceptors方法,参数为InterceptorRegistry,它是拦截注册器。代码如下:

    public void addInterceptors(InterceptorRegistry registry) {
    	// 调用InterceptorRegistry的addInterceptor方法
    	// 拦截所有的请求,除login
    	registry.addInterceptor(new TestInterceptor()).
           addPathPatterns("/**").excludePathPatterns("/login");
    }
    

      注册的配置方式:在spring-mvc.xml中配置mvc:interceptors标签

    <mvc:interceptor>
    	<mvc:mapping path="/**"/>
    	<mvc:exclude-mapping path="/login"/>
    	<bean class="interceptor.TestInterceptor"/>
    </mvc:interceptor>
  • 相关阅读:
    Spark2.0机器学习系列之12: 线性回归及L1、L2正则化区别与稀疏解
    Spark2.0机器学习系列之11: 聚类(幂迭代聚类, power iteration clustering, PIC)
    mysql 5.7.16多源复制
    Windows版 mysql 5.7.16安装
    一分钟经理人
    转 spring官方文档中文版
    MySQL执行计划 EXPLAIN参数
    sql 转 markdown
    Linux下安装MySQL5.6
    MyBatis完全使用指南
  • 原文地址:https://www.cnblogs.com/rain144576/p/12903087.html
Copyright © 2011-2022 走看看