最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springmvc實現(xiàn)簡單的攔截器

 更新時間:2017年05月05日 10:25:08   作者:Henu丶雨巷  
這篇文章主要為大家詳細(xì)介紹了springmvc實現(xiàn)簡單攔截器的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

SpringMVC 中的Interceptor 攔截請求是通過HandlerInterceptor 來實現(xiàn)的。在SpringMVC 中定義一個Interceptor 非常簡單,主要有兩種方式,第一種方式是要定義的Interceptor類要實現(xiàn)了Spring 的HandlerInterceptor 接口,或者是這個類繼承實現(xiàn)了HandlerInterceptor 接口的類,比如Spring 已經(jīng)提供的實現(xiàn)了HandlerInterceptor 接口的抽象類HandlerInterceptorAdapter ;第二種方式是實現(xiàn)Spring的WebRequestInterceptor接口,或者是繼承實現(xiàn)了WebRequestInterceptor的類。這里主要講第一種方式,即實現(xiàn)HandlerInterceptor 接口

HandlerInterceptor 接口中定義了三個方法,我們就是通過這三個方法來對用戶的請求進(jìn)行攔截處理的。

   (1 )preHandle (HttpServletRequest request, HttpServletResponse response, Object handle) 方法,顧名思義,該方法將在請求處理之前進(jìn)行調(diào)用。SpringMVC 中的Interceptor 是鏈?zhǔn)降恼{(diào)用的,在一個應(yīng)用中或者說是在一個請求中可以同時存在多個Interceptor 。每個Interceptor 的調(diào)用會依據(jù)它的聲明順序依次執(zhí)行,而且最先執(zhí)行的都是Interceptor 中的preHandle 方法,所以可以在這個方法中進(jìn)行一些前置初始化操作或者是對當(dāng)前請求的一個預(yù)處理,也可以在這個方法中進(jìn)行一些判斷來決定請求是否要繼續(xù)進(jìn)行下去。該方法的返回值是布爾值Boolean類型的,當(dāng)它返回為false 時,表示請求結(jié)束,后續(xù)的Interceptor 和Controller 都不會再執(zhí)行;當(dāng)返回值為true 時就會繼續(xù)調(diào)用下一個Interceptor 的preHandle 方法,如果已經(jīng)是最后一個Interceptor 的時候就會是調(diào)用當(dāng)前請求的Controller 方法。

   (2 )postHandle (HttpServletRequest request, HttpServletResponse response, Object handle, ModelAndView modelAndView) 方法,由preHandle 方法的解釋我們知道這個方法包括后面要說到的afterCompletion 方法都只能是在當(dāng)前所屬的Interceptor 的preHandle 方法的返回值為true 時才能被調(diào)用。postHandle 方法,顧名思義就是在當(dāng)前請求進(jìn)行處理之后,也就是Controller 方法調(diào)用之后執(zhí)行,但是它會在DispatcherServlet 進(jìn)行視圖返回渲染之前被調(diào)用,所以我們可以在這個方法中對Controller 處理之后的ModelAndView 對象進(jìn)行操作。postHandle 方法被調(diào)用的方向跟preHandle 是相反的,也就是說先聲明的Interceptor 的postHandle 方法反而會后執(zhí)行,這和Struts2 里面的Interceptor 的執(zhí)行過程有點類型。Struts2 里面的Interceptor 的執(zhí)行過程也是鏈?zhǔn)降模皇窃赟truts2 里面需要手動調(diào)用ActionInvocation 的invoke 方法來觸發(fā)對下一個Interceptor 或者是Action 的調(diào)用,然后每一個Interceptor 中在invoke 方法調(diào)用之前的內(nèi)容都是按照聲明順序執(zhí)行的,而invoke 方法之后的內(nèi)容就是反向的。

   (3 )afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handle, Exception ex) 方法,該方法也是需要當(dāng)前對應(yīng)的Interceptor 的preHandle 方法的返回值為true 時才會執(zhí)行。顧名思義,該方法將在整個請求結(jié)束之后,也就是在DispatcherServlet 渲染了對應(yīng)的視圖之后執(zhí)行。這個方法的主要作用是用于進(jìn)行資源清理工作的。

Demo:

先寫一個攔截器

TestInterceptor.java

package com.henu.intercept;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 
 * @author duxiangyu
 * @date 2017年5月5日
 */
public class TestInterceptor implements HandlerInterceptor {

  public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
    
   //todo 在此處添加要操作code 
   System.out.println("preHandle"); 
    return true; //todo 此處為false時,請求不會到達(dá)control層
  }

  public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
    System.out.println("postHandle"); //todo 可以用來修改信息,跳轉(zhuǎn)等
  }

  public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
    System.out.println("afterCompletion"); //todo 最后執(zhí)行
  }
}

然后在spring-mvc.xml里面加入攔截器配置

<mvc:interceptors>
   <mvc:interceptor>
     <mvc:mapping path="/**"/>
     <bean id="TestInterceptor" class="com.henu.intercept.TestInterceptor"/>
   </mvc:interceptor>
</mvc:interceptors>


最后寫一個測試Controller

package com.henu.intercept;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/intercept/")
public class InterceptController {

  @RequestMapping("test")
  public void test(){
    System.out.println("test");
  }
}

最后執(zhí)行的先后順序是

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • MyBatis-Plus條件構(gòu)造器Wrapper應(yīng)用實例

    MyBatis-Plus條件構(gòu)造器Wrapper應(yīng)用實例

    QueryWrapper是用于查詢的Wrapper條件構(gòu)造器,可以通過它來構(gòu)建SELECT語句中的WHERE條件,這篇文章主要介紹了MyBatis-Plus數(shù)據(jù)表操作條件構(gòu)造器Wrapper,需要的朋友可以參考下
    2023-09-09
  • java查找無向連通圖中兩點間所有路徑的算法

    java查找無向連通圖中兩點間所有路徑的算法

    這篇文章主要介紹了java查找無向連通圖中兩點間所有路徑的算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • IntelliJ IDEA 設(shè)置數(shù)據(jù)庫連接全局共享的步驟

    IntelliJ IDEA 設(shè)置數(shù)據(jù)庫連接全局共享的步驟

    在日常的軟件開發(fā)工作中,我們經(jīng)常會遇到需要在多個項目之間共享同一個數(shù)據(jù)庫連接的情況,默認(rèn)情況下,IntelliJ IDEA 中的數(shù)據(jù)庫連接配置是針對每個項目單獨存儲的,幸運的是,IntelliJ IDEA 提供了一種方法來將數(shù)據(jù)庫連接配置設(shè)置為全局共享,從而簡化這一過程
    2024-10-10
  • Java中comparator接口和Comparable接口的比較解析

    Java中comparator接口和Comparable接口的比較解析

    這篇文章主要介紹了Java中comparator接口和Comparable接口的比較解析,Java提供了一個用于比較的接口Comparator和Comparable接口,提供了一個比較的方法,所有實現(xiàn)該接口的類,都動態(tài)的實現(xiàn)了該比較方法,需要的朋友可以參考下
    2023-08-08
  • Java?C++題解leetcode769最多能完成排序的塊

    Java?C++題解leetcode769最多能完成排序的塊

    這篇文章主要為大家介紹了Java?C++題解leetcode769最多能完成排序的塊示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Spring Cloud Gateway 服務(wù)網(wǎng)關(guān)快速實現(xiàn)解析

    Spring Cloud Gateway 服務(wù)網(wǎng)關(guān)快速實現(xiàn)解析

    這篇文章主要介紹了Spring Cloud Gateway 服務(wù)網(wǎng)關(guān)快速實現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • JAVA JDK8 List分組的實現(xiàn)和用法

    JAVA JDK8 List分組的實現(xiàn)和用法

    今天小編就為大家分享一篇關(guān)于JAVA JDK8 List分組的實現(xiàn)和用法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • java線程池參數(shù)舉例詳解(附詳細(xì)代碼)

    java線程池參數(shù)舉例詳解(附詳細(xì)代碼)

    這篇文章主要介紹了Java線程池的工作原理、構(gòu)造方法和關(guān)鍵參數(shù),它還提供了線程池的工作流程、常用線程池實現(xiàn)及參數(shù)優(yōu)化建議,幫助開發(fā)者更好地管理和優(yōu)化線程池,需要的朋友可以參考下
    2025-02-02
  • Spring中Bean的三種實例化方式詳解

    Spring中Bean的三種實例化方式詳解

    這篇文章主要給大家介紹了關(guān)于Spring中實例化bean的三種方式:構(gòu)造方法、靜態(tài)工廠和實例工廠,對我們學(xué)習(xí)有一定的參考價值,需要的小伙伴可以了解一下
    2022-06-06
  • 詳解Mybatis中javaType和ofType的區(qū)別

    詳解Mybatis中javaType和ofType的區(qū)別

    本文主要介紹了詳解Mybatis中javaType和ofType的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05

最新評論

镇安县| 高要市| 北流市| 类乌齐县| 江陵县| 东莞市| 若尔盖县| 阿拉尔市| 怀来县| 罗甸县| 阿拉善左旗| 华池县| 维西| 隆子县| 图片| 阜新| 通州市| 凯里市| 天峨县| 芦山县| 灌云县| 兴化市| 郯城县| 泰兴市| 固镇县| 塔城市| 沽源县| 白水县| 泸定县| 上高县| 汶川县| 颍上县| 攀枝花市| 营山县| 左权县| 奉节县| 潮安县| 阜新| 台湾省| 中牟县| 子长县|