Struts框架學習之攔截器

爲什麼用攔截器?

Struts是基於mvc模式的開發框架。任何框架,都會預先實現一部分功能。struts框架自帶功能的實現,是通過一個個攔截器完成的。

Struts早起版本中,核心功能是通過一個類完成的,這個類叫做核心過濾器。

Struts2.0之後的版本,每一個攔截功能,都由一個單獨的類實現,形成一個獨立的攔截器,用戶可以自由組合這些攔截器來完成自己想要的功能。

有了攔截器,我們的開發就類似於組裝電腦配件。帶來的好處:解耦。

攔截器簡介:

Struts2預定義了一些攔截器,實現了某些功能,如文件上傳等,默認的攔截器在struts-default.xml文件中配置。

 如果使用struts2的相應功能,可以一個個引用攔截器! 也可以定義攔截器棧,包含多個攔截器!開發中就直接使用攔截器棧即可!

struts2定義了默認執行的攔截器棧!

攔截器可以對action請求進行攔截, 從而執行一些預處理操作,預處理操作完成後,控制權進入到action!

        action處理請求完成,又回到攔截器!

        注意:

            如果struts自帶的攔截器完成不了需要,用戶也可以自定義攔截器!

            如果用戶自定義了攔截器,並使用,struts2默認的攔截器就不會調用!

            自定義攔截器的時候,要引用默認的攔截器!(defaultStack)

        <interceptors>

            // 攔截器定義

<interceptor name="params"  class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

    攔截器棧(Interceptor Stack): 將攔截器按一定的順序聯結成一條鏈. 在訪問被攔截的方法時, Struts2攔截器鏈中的攔截器就會按其之前定義的順序被依次調用。

            // 攔截器棧定義 (包含多個攔截器)

            <interceptor-stack name="defaultStack">

                    <interceptor-ref name="exception"/>

                    <interceptor-ref name="alias"/>

                    <interceptor-ref name="servletConfig"/>

                    <interceptor-ref name="i18n"/>

                    <interceptor-ref name="prepare"/>

                    <interceptor-ref name="chain"/>

                    <interceptor-ref name="scopedModelDriven"/>

                    <interceptor-ref name="modelDriven"/>

                    <interceptor-ref name="fileUpload"/>

                    <interceptor-ref name="checkbox"/>

                    <interceptor-ref name="multiselect"/>

                    <interceptor-ref name="staticParams"/>

                    <interceptor-ref name="actionMappingParams"/>

                    <interceptor-ref name="params">

            </interceptor>  

            // 執行攔截器

            <default-interceptor-ref name="defaultStack"/>

        </interceptors>

攔截器與過濾器區別

        共同點:都可以對請求進行攔截! 處理一些公用的操作!

        區別:

            1.作用範圍

                攔截器是struts2的概念!(只在struts中用)

                過濾器是servlet中技術!(在servlet/struts中都可以使用!)

            2. 攔截區域

                攔截器,攔截的是action中方法的執行!

                過濾器,可以攔截任何請求!

Struts2自定義攔截器實現

      1、定義一個類實現Interceptor接口

      2、實現生命週期方法

      3、聲明和引用自定義攔截器

     Interceptor接口

     com.opensymphony.xwork2.interceptor.Interceptor

     所有的自定義攔截器都需要實現該接口,且以單例運行。

      init: 創建後初始化時被調用, 它在攔截器的生命週期內只被調用一次。

      interecept: 每攔截一個動作請求, 該方法就會被調用一次。

      destroy: 攔截器被銷燬之前被調用, 它在攔截器的生命週期內也只被調用一次.


 

Struts2自帶的攔截器


 


發佈了70 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章