Flyingis

          Talking and thinking freely !
          Flying in the world of GIS !
          隨筆 - 156, 文章 - 16, 評論 - 589, 引用 - 0
          數(shù)據(jù)加載中……

          重溫Struts--Action

          作者:Flyingis

          Struts中,ActionServlet擔(dān)任分配工作的控制器角色,實際的工作是交給Action對象來進(jìn)行的。ActionStruts框架的核心類之一,它主要用來訪問業(yè)務(wù)層、為表現(xiàn)層準(zhǔn)備數(shù)據(jù)對象和處理錯誤異常。

          ActionStruts框架中基本上屬于控制器的角色,通常不建議在Action中加入過多的業(yè)務(wù)邏輯,將業(yè)務(wù)邏輯封裝在其他的類中,然后在Action中建立這些類的對象,調(diào)用對象的方法來實現(xiàn)業(yè)務(wù)功能。比較遺憾的是,當(dāng)業(yè)務(wù)邏輯中出現(xiàn)異常的時候沒有辦法將異常說明在頁面中直接反應(yīng)出來,展現(xiàn)給用戶,在Action中控制這些異??梢宰龅竭@點。

          要更詳細(xì)的了解Action的工作機(jī)理,就要剖析ActionServlet控制器的工作流程及其核心方法。在Struts中,擔(dān)任控制器角色的核心是ActionServlet,所有的請求都必須先通過它,而對所有請求的處理是交付給RequestProcessor來完成的,既然處理請求的任務(wù)是交給RequestProcessor來完成,那么可以直接查看org.apche.struts.action.RequestProcessor類,看其process()方法實現(xiàn)了哪些功能,從源代碼中的英文注釋我們可以更深入了解到整個處理過程,很多書籍和網(wǎng)上不少文章都描述了這個過程,還有典型的處理過程圖示,這里就不再詳述。只是從這個過程可以看出,通過繼承ActionServlet來定義自己的控制器請求意義不大,重寫init()方法倒是可以修改初始化工作,如果需要定義自己的控制器,可以繼承RequestProcessor并修改其中的process()方法來實現(xiàn)。

          Struts應(yīng)用中,除了直接繼承org.apache.struts.action.Action類實現(xiàn)Action功能外,Struts還提供了其他幾種Action類來滿足某種特定需要,這些書本上已經(jīng)寫了很多,這里只是照葫蘆畫瓢略作總結(jié):

          ForwardAction—當(dāng)需要從一個頁面轉(zhuǎn)到另一個頁面或資源時,不提倡直接使用頁面或資源路徑調(diào)用,除了與MVC/Model2架構(gòu)向背之外,有時還會帶來其他的問題,前幾天在網(wǎng)上看到一個帖子就是因為直接調(diào)用資源出現(xiàn)了異常,具體出自于哪里沒有記住。這里,應(yīng)該通過控制器使用ForwardAction來完成鏈接的跳轉(zhuǎn),使用屬性parameter設(shè)定forward的鏈接地址。

          IncludeAction—ForwardAction類似,當(dāng)需要引入一個資源時,可以使用IncludeAction來實現(xiàn),屬性parameter設(shè)定include的鏈接地址。

          SwitchAction—用于從一個模塊轉(zhuǎn)換至另一個模塊,一種方法是使用相對于Context的路徑來進(jìn)行forward查找,另外一種就是使用SwithAction,它需要在請求中帶兩個參數(shù),一個是prefix用來指定模塊前綴名稱,一個是page用來指定相對于模塊的資源路徑。

          DispatchAction—隨著Struts Web應(yīng)用規(guī)模擴(kuò)大,維護(hù)Action復(fù)雜度提高,可以使用模塊化來管理Action。另一方面,當(dāng)一個頁面需要多個Action時,我們就可以使用DispatchAction來將一個頁面中所有相關(guān)的動作放在一個action類中實現(xiàn),此時不需要重定義execute()方法,它已經(jīng)在DispatchAction抽象類中定義,我們需要編寫自己的方法來響應(yīng)一個頁面上不同的動作。它的關(guān)鍵屬性是parameter

          LookupDispatchAction—它是DispatchAction的子類,不同的是,當(dāng)頁面按鈕的property屬性相同的時候,它可以通過查詢資源文件來確定相應(yīng)的動作,這個功能主要是通過重寫getKeyMethodMap()方法實現(xiàn)的。

          posted on 2006-03-06 00:07 Flyingis 閱讀(1198) 評論(0)  編輯  收藏 所屬分類: Web 框架與開發(fā)

          主站蜘蛛池模板: 上杭县| 巴东县| 宜君县| 平和县| 滦南县| 崇仁县| 东阿县| 长乐市| 策勒县| 合肥市| 通榆县| 武陟县| 平顶山市| 台南县| 图木舒克市| 绥中县| 平利县| 喜德县| 高淳县| 台南县| 宜昌市| 金溪县| 教育| 旬阳县| 宁国市| 北安市| 酉阳| 安阳市| 沁源县| 浠水县| 盈江县| 常州市| 新干县| 务川| 馆陶县| 邢台县| 萝北县| 炉霍县| 定边县| 安龙县| 宾阳县|