• SpringMVC的拦截器


    SpringMVC的拦截器:

      1.首先我们需要引入jar包,这就不用说了,

      定义自己的拦截器实现HandlerInterceptor,进行方法的重写。

      

      2.配置web.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <!--中央调度器-->
    <servlet>
      <servlet-name>springmvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     
      <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
      </init-param>
      <!-- TOmcat启动的时候,Servlet对象就存储到内存 正整数 -->
      <load-on-startup>1</load-on-startup>
    </servlet>
     
    <servlet-mapping>
      <servlet-name>springmvc</servlet-name>
      <url-pattern>*.do</url-pattern>
    </servlet-mapping>

      3.配置一个处理器controller

      4.定义大配置applicationContext.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <!-- 包扫描器 -->
    <context:component-scan base-package="cn.hq.controller"></context:component-scan>
     
    <mvc:interceptors>
      <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean class="cn.hq.interceptor.MyInterceptor"></bean>
      </mvc:interceptor>
    </mvc:interceptors>

    注意:现在拦截器的方法里第一个方法的返回值为false

    效果演示:

    请求后我们会发现控制台输出一个字段

    正是因为我们设置了它的返回值类型,故请求打道回府,黯然收场,他需要我们来解封他。

    当把他解封后(true),再次请求:

    再附上一张图:

    方法解析:

      第一个方法preHandle尤其重要,他可以根据返回值

      改变请求往下的流程,起着先导作用,第二个方法posHandle,他可以在

      请求通过处理器后,紧接着做一系列的操作,最后经过最后一个方法

      afterCompletion,进行客户端的响应。


    多个拦截器的配置:

    1
    2
    3
    4
    5
    6
    7
    8
    <!-- 定义多个拦截器 -->
     
    <mvc:interceptors>
      <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean class="cn.hq.interceptor.MyInterceptor2"></bean>
      </mvc:interceptor>
    </mvc:interceptors>

    测试步骤,多配置一个拦截器

    测试案例1,开启第一道拦截器,改为true,第二道拦截器进行false,查看请求流程:

    多个拦截器请求流程图:

    解释:结合上述图所示,他经过第一道拦截器时,通道开放,往下继续走,当他走到第二道拦截时,发现通道关闭了,

       但还是走了二道通道的第一方法,完了请求在这停止,无法通过处理器,但是第一道拦截器已经开启了其通道,

       故走了最终响应的afterCompletion方法。

    测试案例2,开启第一道拦截器,改为false,第二道拦截器进行true,查看请求流程:

    解释:根据流程图,走完第一个方法后,停止前进。

    测试案例3,两道通道全部打开,查看请求流程:


  • 相关阅读:
    sql 连表
    Laravel 数据验证
    zend studio 破解、汉化和字体颜色及快捷键相关设置
    关于storm的一些知识点
    storm架构原理及集群部署
    storm使用过程中出现的错误:Caused by: java.net.UnknownHostException: storm: 未知的名称或服务
    ElasticSearch基础知识
    ElasticSearch java客户端更新时出现的错误:NoNodeAvailableException[None of the configured nodes are available
    sublime text3 注册码 (Version 3.0)
    使用HTMLTestRunner生产报告
  • 原文地址:https://www.cnblogs.com/henuyuxiang/p/6808977.html
Copyright © 2020-2023  润新知