webber

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            11 Posts :: 2 Stories :: 3 Comments :: 0 Trackbacks

           

          3.2.2  攔截器介紹

          攔截器可以實現橫切(crosscutting)功能并使這些實現相對action甚至Struts 2框架保持獨立。這樣可以使核心框架代碼比以前更加簡潔,且使開發人員更快捷地使用新框架的特性。實際上,松耦合機制意味著用戶再也不用等著框架來實現他們所需的新特性;相反,它們可以實現和使用自己所需的特性且不用修改框架的底層源代碼。

          使用攔截器可以達到如下所描述的目的。

          在調用action之前,提供預處理(preprocessing)邏輯。

          與action進行交互,提供執行信息,比如受Spring管理的對象、設置action里的請求參數等。

          在調用action之后,提供后處理(postprocessing)邏輯。

          修改返回的結果,進而修改呈現給用戶的內容。

          捕獲異常從而替換可執行的處理過程或返回一個不同結果。

          很多Struts 2特性都是通過攔截器提供的。表3-1列出了Struts 2中已配置好且可隨時使用的攔截器。

          表3-1  Struts 2框架提供的攔截器

          攔 截 器

          配 置 名

             

          別名攔截器(Alias Interceptor

          alias

          允許參數在跨越多個請求時使用不同別名,這個攔截器可將多個action使用不同名字鏈接起來,然后用于處理同一信息

          鏈攔截器(Chaining Interceptor

          chaining

          允許當前action能夠使用上一個被執行action的屬性,這個攔截器通常要和“chain”結果類型一起使用

          多選框攔截器(Checkbox Interceptor

          checkbox

          為沒有被選定的多選框增加一個值為false的參數,協助管理多選框(在HTTP請求里,那些沒有被選定的多選框通常是沒有任何信息的)

          轉換錯誤攔截器(Conversion  Error Interceptor

          conversionError

          將轉換錯誤的信息(包括轉換的字符串和參數類型等)存放到action的字段錯誤集里去

          會話創建攔截器(Create Session Interceptor

          createSession

          自動創建一個HTTP會話(如果不存在會話)

          調試攔截器(Debugging Interceptor

          debugging

          為開發者提供幾種不同調試界面

          執行和等待攔截器(Execute and Wait Interceptor

          execAndWait

          action在后臺執行時,給用戶顯示一個過渡性的等待頁面

          異常攔截器(Exception Interceptor

          exception

          action拋出的異常映射到結果,這樣就通過重定向來自動處理異常

          文件上傳攔截器(File Upload Interceptor

          fileUpload

          便于文件上傳

          國際化攔截器(Internatio- nalization Interceptor

          i18n

          在用戶會話中跟蹤選定的區域(locale)信息

          日志攔截器(Logging Interceptor

          logger

          通過輸出被執行action的名字,提供簡單的日志功能

          消息存儲攔截器(Message Store Interceptor

          store

          在會話中為action存儲和檢索消息、字段錯誤以及action錯誤,該攔截器要求action實現ValidationAware接口

          模型驅動攔截器(Model Driven Interceptor

          modelDriven

          action的模型對象存放在棧里,該攔截器要求action實現ModelDriven接口

          作用域模型驅動攔截器(Scoped Model Driven Interceptor

          scopedModelDriven

          aciton的配置作用域里存儲和檢索模型對象,該攔截器要求action實現ScopedModelDriven接口

          參數攔截器(Parameters Interceptor

          params

          action里設置請求參數

          參數過濾攔截器(Parameter Filter Interceptor

          n/a

          控制action對參數的訪問(非默認配置)

          (續)

          攔 截 器

          配 置 名

             

          預備攔截器(Prepare Interceptor

          prepare

          調用actionprepare()方法,該攔截器要求action實現Preparable接口

          概要攔截器(Profiling Interceptor

          profile

          允許action記錄簡單的概要信息日志

          作用域攔截器(Scope Interceptor

          scope

          在會話和應用作用域中存儲和檢索action的狀態

          Servlet配置攔截器(Servlet Configuration Interceptor

          servletConfig

          使action能訪問servlet里的各種信息

          靜態參數攔截器(Static Parameters Interceptor

          staticParams

          設置action里的靜態定義值(通過action配置里的param標簽來實現)

          角色攔截器(Roles Interceptor

          roles

          只有在用戶是配置的角色之一時才允許執行action

          計時攔截器(Timer Interceptor

          timer

          以執行action所花時間的形式,簡單記錄action概要信息

          令牌攔截器(Token Interceptor

          token

          檢查action的合法令牌,以防止重復提交表單

          令牌會話攔截器(Token Session Interceptor

          tokenSession

          功能與令牌攔截器相同,但是對于非法令牌,提交的數據將保存在會話中

          驗證攔截器(Validation Interceptor

          validation

          action提供驗證支持

          工作流攔截器(Workflow Interceptor

          workflow

          當驗證失敗時,不執行action然后重定向到INPUT視圖

          每個攔截器為action提供的特性都不一樣。你可能已經猜到了,為action提供一個完備的執行環境需使用多個攔截器。為了便于使用,Struts 2允許創建攔截器棧(interceptor stack),由action來引用,而不是為每個action逐個配置所有攔截器。表3-2列出了所有Struts 2框架預配置好的棧,每個棧中包含多個攔截器。有一個很重要的問題必須注意,那就是攔截器是按照配置好的順序來調用的。

          表3-2  Struts 2框架提供的攔截器棧

          已配置棧名

          包含的攔截器

             

          basicStack

          exceptionservletConfigpreparecheckboxparamsconversionError

          如使用棧,最起碼要使用這幾個攔截器

          validationWorkflowStack

          basicStackvalidationworkflow

          在基本棧的基礎上增加驗證和工作流特性

          fileUploadStack

          fileUploadbasicStack

          在基本棧的基礎上增加文件上傳特性

          modelDrivenStack

          modelDrivenbasicStack

          在基本棧的基礎上增加模型功能特性

          chainStack

          chainbasicStack

          在基本棧的基礎上增加鏈接特性

          i18nStack

          i18nbasicStack

          在基本棧的基礎上增加區域持久化特性

          (續)

          已配置棧名

          包含的攔截器

             

          paramPrepareParamsStack

          exceptionaliasparamsservletConfigpreparei18nchainmodelDrivenfile- UploadcheckboxstaticParamsparamsconversionErrorvali- dationworkflow

          提供包括前actionpre-action)方法調用的完整棧。params棧使用兩次:第一次是在調用prepare()方法之前提供參數,第二次是在預備階段為可能被檢索的對象重新使用參數

          defaultStack

          exceptionaliasservlet- Configpreparei18nchaindebuggingprofilingscoped- ModelDrivenmodelDrivenfileUploadcheckboxstatic- Paramsparamsconversion- Errorvalidationworkflow

          提供一個完整棧,包括調試和概要

          executeAndWaitStack

          execAndWaitdefaultStackexecAndWait

          提供執行與等待棧,比如在上傳文件時需要向用戶顯示一個等待頁面時,就可以使用這個棧

          Struts2XWork)提供的攔截器的功能說明:

           

           

          攔截器

          名字

          說明

          Alias Interceptor

          alias

          在不同請求之間將請求參數在不同名字件轉換,請求內容不變

          Chaining Interceptor

          chain

          讓前一個Action的屬性可以被后一個Action訪問,現在和chain類型的result<result type=”chain”>)結合使用。

          Checkbox Interceptor

          checkbox

          添加了checkbox自動處理代碼,將沒有選中的checkbox的內容設定為false,而html默認情況下不提交沒有選中的checkbox

          Cookies Interceptor

          cookies

          使用配置的name,value來是指cookies

          Conversion Error Interceptor

          conversionError

          將錯誤從ActionContext中添加到Action的屬性字段中。

          Create Session Interceptor

          createSession

          自動的創建HttpSession,用來為需要使用到HttpSession的攔截器服務。

          Debugging Interceptor

          debugging

          提供不同的調試用的頁面來展現內部的數據狀況。

          Execute and Wait Interceptor

          execAndWait

          在后臺執行Action,同時將用戶帶到一個中間的等待頁面。

          Exception Interceptor

          exception

          將異常定位到一個畫面

          File Upload Interceptor

          fileUpload

          提供文件上傳功能

          I18n Interceptor

          i18n

          記錄用戶選擇的locale

          Logger Interceptor

          logger

          輸出Action的名字

          Message Store Interceptor

          store

          存儲或者訪問實現ValidationAware接口的Action類出現的消息,錯誤,字段錯誤等。

          Model Driven Interceptor

          model-driven

          如果一個類實現了ModelDriven,將getModel得到的結果放在Value Stack中。

          Scoped Model Driven

          scoped-model-driven

          如果一個Action實現了ScopedModelDriven,則這個攔截器會從相應的Scope中取出model調用ActionsetModel方法將其放入Action內部。

          Parameters Interceptor

          params

          將請求中的參數設置到Action中去。

          Prepare Interceptor

          prepare

          如果Acton實現了Preparable,則該攔截器調用Action類的prepare方法。

          Scope Interceptor

          scope

          Action狀態存入sessionapplication的簡單方法。

          Servlet Config Interceptor

          servletConfig

          提供訪問HttpServletRequestHttpServletResponse的方法,以Map的方式訪問。

          Static Parameters Interceptor

          staticParams

          struts.xml文件中將<action>中的<param>中的內容設置到對應的Action中。

          Roles Interceptor

          roles

          確定用戶是否具有JAAS指定的Role,否則不予執行。

          Timer Interceptor

          timer

          輸出Action執行的時間

          Token Interceptor

          token

          通過Token來避免雙擊

          Token Session Interceptor

          tokenSession

          Token Interceptor一樣,不過雙擊的時候把請求的數據存儲在Session

          Validation Interceptor

          validation

          使用action-validation.xml文件中定義的內容校驗提交的數據。

          Workflow Interceptor

          workflow

          調用Actionvalidate方法,一旦有錯誤返回,重新定位到INPUT畫面

          Parameter Filter Interceptor

          N/A

          從參數列表中刪除不必要的參數

          Profiling Interceptor

          profiling

          通過參數激活profile

          posted on 2010-02-10 16:36 webber 閱讀(2449) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 雷波县| 蒙城县| 和田县| 疏附县| 霍城县| 密山市| 祥云县| 隆昌县| 图片| 巴彦淖尔市| 新营市| 东乡县| 信阳市| 临猗县| 襄城县| 天等县| 三门峡市| 岳阳县| 贞丰县| 浪卡子县| 三亚市| 宁阳县| 旅游| 桂林市| 桓台县| 五峰| 资中县| 托克托县| 仙游县| 沙田区| 莲花县| 长子县| 凤翔县| 德庆县| 湖南省| 忻州市| 烟台市| 高州市| 宽城| 北川| 阳泉市|