亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringMVC攔截器創建配置及執行順序是什么

發布時間:2022-05-30 10:16:46 來源:億速云 閱讀:308 作者:zzz 欄目:開發技術

本文小編為大家詳細介紹“SpringMVC攔截器創建配置及執行順序是什么”,內容詳細,步驟清晰,細節處理妥當,希望這篇“SpringMVC攔截器創建配置及執行順序是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    SpringMVC攔截器介紹

    springMVC 中的攔截器用于攔截控制器方法的執行

    先創建出前置需要的一些條件:

    <a th:href="@{/testInterceptor}" rel="external nofollow" >測試攔截器</a>

    后端:

    @Controller
    public class TestController {
     
        @RequestMapping("/testInterceptor")
        public String testInterceptor() {
            return "success";
        }
    }

    一、創建攔截器

    新建一個包 interceptors,在下面創建一個攔截器 FirstInterceptor ,并且要實現 HandlerInterceptor 接口。

    SpringMVC攔截器創建配置及執行順序是什么

    快捷鍵Ctrl + O,快速重寫方法,圖示里的 3 個。

    public class FirstInterceptor implements HandlerInterceptor {
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("FirstInterceptor --> preHandle");
            return false;
        }
     
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("FirstInterceptor --> postHandle");
        }
     
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("FirstInterceptor --> afterCompletion");
        }
    }

    preHandle: 在當前控制器方法執行之前執行。

    postHandle: 在當前控制器方法執行之后執行。

    afterCompletion:處理完視圖和模型數據,渲染視圖完畢之后執行。

    二、配置攔截器

    在 springMVC 配置文件里配置攔截器,對象就是FirstInterceptor 類:

    <!-- 配置攔截器 -->
      <mvc:interceptors>
          <bean class="com.pingguo.mvc.interceptors.FirstInterceptor"></bean>
      </mvc:interceptors>

    重新部署,訪問http://localhost:8080/springmvc/,發現頁面空白,查看控制器日志看到有打印:

    SpringMVC攔截器創建配置及執行順序是什么

    說明攔截成功。

    看下上面重新的三個方法中,只有preHandle有返回值,是個布爾類型:false 表示攔截true 表示放行

    修改上面preHandle的返回為 true,重新部署后再次訪問首頁,可以訪問成功。

    SpringMVC攔截器創建配置及執行順序是什么

    查看控制臺打印輸出,看到在渲染之前,前面2個方法執行了:preHandlepostHandle

    SpringMVC攔截器創建配置及執行順序是什么

    在非常多的 Thymeleaf 渲染之后,最后一個 afterCompletion 也執行了。

    SpringMVC攔截器創建配置及執行順序是什么

    現在繼續點擊首頁里的新加的超鏈接,發現也會被攔截放行。

    SpringMVC攔截器創建配置及執行順序是什么

    說明這種配置方式,會攔截所有的請求

    設置不需要攔截的請求

    可以通過 ref 或 bean 標簽設置攔截器:

    • 通過mvc:mapping設置需要攔截的請求通過

    • mvc:exclude-mapping設置需要排除的請求

    <bean name="firstInterceptor" class="com.pingguo.mvc.interceptors.FirstInterceptor"></bean>
        <!-- 配置攔截器 -->
        <mvc:interceptors>
            <mvc:interceptor>
                <mvc:mapping path="/**"/>
                <mvc:exclude-mapping path="/"></mvc:exclude-mapping>
                <ref bean="firstInterceptor"></ref>
            </mvc:interceptor>
        </mvc:interceptors>

    注意這里我在外部注冊了一個 bean 叫 firstInterceptor,以便 ref 引用。

    • <mvc:mapping path="/**"/>,表示攔截所有請求。

    • <mvc:exclude-mapping path="/">,表示除了首頁不攔截。

    也就是說,現在我訪問http://localhost:8080/springmvc/的時候,應該不攔截。訪問http://localhost:8080/springmvc/testInterceptor就會攔截了。

    試一下,先訪問 http://localhost:8080/springmvc/

    可以正常打開首頁,并且控制臺也沒有輸出攔截器里的內容:

    SpringMVC攔截器創建配置及執行順序是什么

    現在繼續訪問 http://localhost:8080/springmvc/testInterceptor

    SpringMVC攔截器創建配置及執行順序是什么

    攔截了。

    三、多個攔截器的執行順序

    繼續新建一個攔截器SecondInterceptor,注意這次我加了 @Component,方便在配置文件中直接ref引用使用。

    @Component
    public class SecondInterceptor implements HandlerInterceptor {
     
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("SecondInterceptor --> preHandle");
            return true;
        }
     
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("SecondInterceptor --> postHandle");
        }
     
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("SecondInterceptor --> afterCompletion");
        }
    }

    修改攔截器配置:

    <!-- 配置攔截器 -->
        <mvc:interceptors>
            <ref bean="firstInterceptor"></ref>
            <ref bean="secondInterceptor"></ref>
        </mvc:interceptors>

    重新部署,訪問下首頁http://localhost:8080/springmvc/,查看控制臺打印輸出。

    SpringMVC攔截器創建配置及執行順序是什么

    可以發現,preHandle 方法執行的順序是 FirstInterceptor->SecondInterceptor。其他 2 個方法則是順序倒過來。

    若每個攔截器的 preHandle()都返回 true:

    • 執行順序跟配置里的順序有關,在上面攔截器里 firstInterceptor 就是在 secondInterceptor前面。

    • preHandle()會按照配置的順序執行,而postHandle()和afterComplation()`會按照配置的反序執行。

    若某個攔截器的preHandle()返回了false:

    • preHandle()返回false和它之前的攔截器的preHandle()都會執行。

    • postHandle()都不執行。

    • 返回false的攔截器之前的攔截器的afterComplation()會執行。

    試一下,把 SecondInterceptor 中的preHandle()修改返回 false,再次請求下首頁:

    SpringMVC攔截器創建配置及執行順序是什么

    符合預期。

    讀到這里,這篇“SpringMVC攔截器創建配置及執行順序是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    平谷区| 泾源县| 盈江县| 内黄县| 惠东县| 永新县| 武邑县| 浑源县| 诸暨市| 峨边| 郁南县| 龙海市| 五莲县| 武山县| 绥芬河市| 深州市| 从化市| 江城| 杭州市| 安西县| 芮城县| 满洲里市| 寻乌县| 利川市| 龙口市| 宁远县| 合阳县| 八宿县| 汝城县| 泰兴市| 屯留县| 阜平县| 乡宁县| 西乡县| 册亨县| 牟定县| 凭祥市| 嘉祥县| 九台市| 平塘县| 喀喇|