對請求進行處理的元素主要有interceptorsAction以及Result下面分別對其進行講述
.攔截器配置(interceptors)
通過使用攔截器我們可以在action中的方法執行之前先執行一些我們事先定義好了的方法也可以在action中的方法執行之後立即執行一些我們事先定義好了的方法在開發的過程中攔截器將是一個強有力的工具攔截器有很多很多的功能如校驗屬性封裝安全日志等等如下表所示
表攔截器功能表
校驗(validation)
檢查輸入是否正確
屬性封裝(property population)
將輸入傳輸和轉化為對象的屬性
日志(logging)
記錄關於每個action的詳細信息
切面(profiling)
記錄action的吞吐量尋找性能瓶頸(不是很懂)
我們可以將多個攔截器鏈接在一起形成一個攔截器棧比方說一個action不僅要對客戶端的資格進行審查還要記錄它自己的行為那麼我們可以將實現這兩個功能的攔截器放在一起形成一個攔截器棧(interceptor stack)攔截器是以java類的形式實現的因此每一個攔截器都有一個唯一的類名為了讓對攔截器的參考更加容易我們可以在框架中為每個攔截器注冊一個更簡單的名字下面給出了一個注冊攔截器的例子
<interceptors>
<interceptor name=security class=comcompanysecuritySecurityInterceptor/>
<interceptorstack name=secureStack>
<interceptorref name=security/>
<interceptorref name=defaultStack/>
</interceptorstack>
</interceptors>
在定義一個攔截器棧的時候單個的攔截器和攔截器棧可以以任意的順序混合在一起struts框架將會按照攔截器在棧裡面的順序調用它們大多說應用程序都會定義一個默認的攔截器棧如<defaultinterceptorref name=defaultStack/>默認的攔截器棧會作用於package中的每個action上當然action還可以定義它自己的本地(局部)棧如下面例子所示
<action name=
VelocityCounter
class=
org
apache
struts
example
counter
SimpleCounter
>
<result name=
success
>
</result>
<interceptor
ref name=
defaultComponentStack
/>
</action>
.Action配置
action mappings是框架中的基本工作單元框架通過對請求的request路徑進行映射來決定由哪個action來處理請求action mappings能指定一系列的result異常處理器以及攔截器action元素的所有屬性中只有name屬性是必須的其它屬性都是可選的關於如何從請求路徑映射到action在namespace那節中已經說過了這裡就不說了盡管對於action的命名很靈活但是action的名字中最好不要出現斜線(/)點號()破折號(/)以免出現一些不可預知的錯誤
在Action接口中定義了action默認的方法入口它就是execute方法但是並不是每個action類都必須實現這個接口如果action類沒有實現這個接口的話框架將使用反射來尋找一個execute方法有時候我們的action中可能會包括多個方法入口並且不同的情況下方法入口不同例如執行修改操作時我們想進入action的mofify方法執行增加操作時進入action的add方法這個時候怎麼辦呢?我們可以通過指定action元素的method屬性來實現如下所示
<action name=
modify
class=
example
CrudAction
method=
modify
>
如果在action類中沒有execute方法也沒有在配置文件中指定其它的方法框架會拋出異常
很多時候多個action mapping會共享一個相同的模式這個時候我們可以使用通配符方法還是舉例來說如下所示
<action name=editCrud class=exampleCrudAction method=edit/>
<action name=deleteCrud class= exampleCrudAction method= delete/>
[] []
From:http://tw.wingwit.com/Article/program/Java/ky/201311/29111.html