SpringMVC的攔截器


SpringMVC的攔截器:

  1.首先咱們須要引入jar包,這就不用說了,java

  定義本身的攔截器實現HandlerInterceptor,進行方法的重寫。web

  

  2.配置web.xmlspring

<!--中央調度器-->
    <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.配置一個處理器controllermvc

  4.定義大配置applicationContext.xmlapp

<!-- 包掃描器 -->
<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測試

效果演示:url

請求後咱們會發現控制檯輸出一個字段spa

正是由於咱們設置了它的返回值類型,故請求打道回府,黯然收場,他須要咱們來解封他。3d

當把他解封后(true),再次請求:component

再附上一張圖:

方法解析:

  第一個方法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,兩道通道所有打開,查看請求流程:


生活有時就是如此,它在關上你一扇門以前,定會爲你開啓另一扇,只是在這個過程當中,咱們須要通過重重考驗,才能經過通道,實現本身的目標。

                          ----告誡本身

相關文章
相關標籤/搜索