1. 程式人生 > >SpringMVC的攔截器

SpringMVC的攔截器

ica 現在 handle 3-9 keyword contain sha 但是 add

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,兩道通道全部打開,查看請求流程:

技術分享


SpringMVC的攔截器