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>
  • 相关阅读:
    【JavaScript DOM 编程艺术】 笔记
    如何循序渐进有效学习 JavaScript?
    如何正确学习JavaScript
    HTML5学习
    window上杀死node进程
    HTML5:离线存储
    js面向对象的理解
    H5项目常见问题及注意事项
    查找已连接过的wifi密码
    flex的兼容
  • 原文地址:https://www.cnblogs.com/rain144576/p/12903087.html
Copyright © 2011-2022 走看看