zoukankan      html  css  js  c++  java
  • SpringMVC的拦截器


    SpringMVC的拦截器:

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

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

      

      2.配置web.xml

    <!--中央调度器-->
        <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

    <!-- 包扫描器 -->
    <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,进行客户端的响应。


    多个拦截器的配置:

        <!-- 定义多个拦截器 -->
        
        <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,两道通道全部打开,查看请求流程:


    生活有时就是如此,它在关上你一扇门之前,定会为你开启另外一扇,只是在这个过程中,我们需要经过重重考验,才能通过通道,实现自己的目标。

                              ----告诫自己

  • 相关阅读:
    HDU 4024 Dwarven Sniper’s hunting(数学公式 或者是二分)
    二分图最大匹配总结
    HDU 4022 Bombing (STL应用)
    HDU 1847 Good Luck in CET4 Everybody!(组合博弈)
    HDU 1556 Color the ball(树状数组)
    HDU 4023 Game(博弈)
    HDU 1406 完数(水题)
    HDU 4021 24 Puzzle
    Oracle 多表查询优化
    【编程之美】字符串移位包含的问题(续)
  • 原文地址:https://www.cnblogs.com/hq-123/p/6285931.html
Copyright © 2011-2022 走看看