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>
  • 相关阅读:
    poj 2485 Highways 最小生成树
    hdu 3415 Max Sum of MaxKsubsequence
    poj 3026 Borg Maze
    poj 2823 Sliding Window 单调队列
    poj 1258 AgriNet
    hdu 1045 Fire Net (二分图匹配)
    poj 1789 Truck History MST(最小生成树)
    fafu 1181 割点
    减肥瘦身健康秘方
    人生的问题
  • 原文地址:https://www.cnblogs.com/rain144576/p/12903087.html
Copyright © 2011-2022 走看看