熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

運用Jakarta Struts的七大實戰心法

2013-11-23 20:21:37  來源: Java開源技術 

  (作者Chuck Cavaness 編譯 邱文宇)
  編者按當作者 Chuck Cavaness(著有《Programming Jakarta Struts》一書)所在的網絡公司決定采用Struts框架之後Chuck曾經花費了好幾個月來研究如何用它來構建公司的應用系統本文敘述的正是作者在運用Struts過程中來之不易的若干經驗和心得如果你是個負責通過jsp和servlet開發Web應用的Java程序員並且也正在考慮采用基於Struts的構建方法的話那麼你會在這裡發現很多頗有見地同時也很有價值的信息
   只在必要的時候才考慮擴展Struts框架
  一個好的framework有很多優點首先它必須能夠滿足用戶的可預見的需求為此 Struts為Web 應用提供了一個通用的架構這樣開發人員可以把精力集中在如何解決實際業務問題上其次一個好的framework還必須能夠在適當的地方提供擴展接口以便應用程序能擴展該框架來更好的適應使用者的實際需要
  如果Struts framework在任何場合任何項目中都能很好的滿足需求那真是太棒了但是實際上沒有一個框架聲稱能做到這一點一定會有一些特定的應用需求是框架的開發者們無法預見到的因此最好的辦法就是提供足夠的擴展接口使得開發工程師能夠調整struts來更好的符合他們的特殊要求
  在Struts framework中有很多地方可供擴展和定制幾乎所有的配置類都能被替換為某個用戶定制的版本這只要簡單的修改一下Struts的配置文件就可以做到
  其他組件如ActionServlet和 RequestProcessor 也能用自定義的版本代替 甚至連Struts 裡才有的新特性也是按照擴展的原則來設計的例如在異常處理機制中就允許用戶定制異常處理的句柄以便更好的對應用系統發生的錯誤做出響應
  作為框架的這種可調整特性在它更適合你的應用的同時也在很大的程度上影響了項目開發的效果首先由於您的應用是基於一個現有的成熟的穩定的framework如Struts測試過程中發現的錯誤數量將會大大減少同時也能縮短開發時間和減少資源的投入因為你不再需要投入開發力量用於編寫基礎框架的代碼了
  然而 實現更多的功能是要花費更大的代價的我們必須小心避免不必要的濫用擴展性能 Struts是由核心包加上很多工具包構成的它們已經提供了很多已經實現的功能因此不要盲目的擴展Struts框架要先確定能不能采用其他方法使用現有的功能來實現 在決定編寫擴展代碼前務必要確認Struts的確沒有實現你要的功能否則重復的功能會導致混亂將來還得花費額外的精力清除它
   使用異常處理聲明
  要定義應用程序的邏輯流程成熟的經驗是推薦在代碼之外用配置的方法來實現而不是寫死在程序代碼中的在JEE中這樣的例子比比皆是從實現EJB的安全性和事務性行為到描述JMS消息和目的地之間的關系很多運行時的處理流程都是可以在程序之外定義的
  Struts 創建者從一開始就采用這種方法通過配置Struts的配置文件來定制應用系統運行時的各個方面這一點在版本的新特性上得到延續包括新的異常處理功能在Struts framework以前的版本中開發人員不得不自己處理Struts應用中發生的錯誤情況在最新的版本中情況大大的改觀了Struts Framework提供了內置的一個稱為 ExceptionHandler 的類 用於系統缺省處理action類運行中產生的錯誤這也是在上一個技巧中我們提到的framework許多可擴展接口之一
  Struts缺省的 ExceptionHandler類會生成一個ActionError對象並保存在適當的范圍(scope)對象中這樣就允許JSP頁面使用錯誤類來提醒用戶出現什麼問題如果你認為這不能滿足你的需求那麼可以很方便的實現你自己的ExcepionHandler類
  具體定制異常處理的方法和機制
  要定制自己的異常處理機制第一步是繼承orgapachestrutsactionExceptionHandler類這個類有個方法可以覆蓋一個是excute()另外一個是storeException() 在多數情況下只需要覆蓋其中的excute()方法下面是ExceptionHandler類的excute()方法聲明
  正如你看到的該方法有好幾個參數其中包括原始的異常方法返回一個ActionForward對象用於異常處理結束後將controller類帶到請求必須轉發的地方去
  當然您可以實現任何處理但一般而言我們必須檢查拋出的異常並針對該類型的異常進行特定的處理缺省的系統的異常處理功能是創建一個出錯信息同時把請求轉發到配置文件中指定的地方去 定制異常處理的一個常見的例子是處理嵌套異常假設該異常包含有嵌套異常這些嵌套異常又包含了其他異常因此我們必須覆蓋原來的execute()方法對每個異常編寫出錯信息
  一旦你創建了自己的ExceptionHandler 類就應該在Struts配置文件中的部分聲明這個類以便讓Struts知道改用你自定義的異常處理取代缺省的異常處理
  可以配置你自己的ExceptionHandler 類是用於Action Mapping特定的部分還是所有的Action對象如果是用於Action Mapping特定的部分就在元素中配置如果想讓這個類可用於所有的Action對象可以在 元素中指定例如假設我們創建了異常處理類CustomizedExceptionHandler用於所有的Action類 元素定義如下所示
  在元素中可以對很多屬性進行設置在本文中最重要的屬性莫過於handler屬性 handler屬性的值就是自定義的繼承了ExceptionHandler類的子類的全名 假如該屬性沒有定義Struts會采用自己的缺省值當然其他的屬性也很重要但如果想覆蓋缺省的異常處理的話handler無疑是最重要的屬性
  最後必須指出的一點是你可以有不同的異常處理類來處理不同的異常在上面的例子中CustomizedExceptionHandler用來處理任何javalangException的子類 其實你也可以定義多個異常處理類每一個專門處理不同的異常樹下面的XML片斷解釋了如何配置以實現這一點
  在這裡一旦有異常拋出struts framework將試圖在配置文件中找到ExceptionHandler如果沒有找到那麼struts將沿著該異常的父類鏈一層層往上找直到發現匹配的為止因此我們可以定義一個層次型的異常處理關系結構在配置文件中已經體現了這一點
   使用應用模塊(Application Modules)
  Struts 的一個新特性是應用模塊的概念應用模塊允許將單個Struts應用劃分成幾個模塊每個模塊有自己的Struts配置文件JSP頁面Action等等這個新特性是為了解決大中型的開發隊伍抱怨最多的一個問題即為了更好的支持並行開發允許多個配置文件而不是單個配置文件
  注在早期的beta版本中該特性被稱為子應用(subapplications)最近的改名目的是為了更多地反映它們在邏輯上的分工
  顯然當很多開發人員一起參加一個項目時單個的Struts配置文件很容易引起資源沖突應用模塊允許Struts按照功能要求進行劃分許多情況已經證明這樣更貼近實際例如假設我們要開發一個典型的商店應用程序可以將組成部分劃分成模塊比如catalog(商品目錄) customer(顧客) customer service(顧客服務) order(訂單)等每個模塊可以分布到不同的目錄下這樣各部分的資源很容易定位有助於開發和部署 顯示了該應用的目錄結構
  圖 一個典型的商店應用程序的目錄結構
   
  注如果你無需將項目劃分成多個模塊Struts框架支持一個缺省的應用模塊這就使得應用程序也可以在版本下創建具有可移植性因為應用程序會自動作為缺省的應用模塊
  為了使用多應用模塊功能必須執行以下幾個准備步驟
  &#; 為每個應用模塊創建獨立的Struts配置文件
  &#; 配置Web 部署描述符 Webxml文件
  &#; 使用orgapachestrutsactionsSwitchAction 來實現程序在模塊之間的跳轉
  創建獨立的Struts配置文件
  每個Struts應用模塊必須擁有自己的配置文件允許創建自己的獨立於其他模塊的ActionActionForm異常處理甚至更多
  繼續以上面的商店應用程序為例我們可以創建以下的配置文件一個文件名為strutsconfigcatalogxml包含catalog(商品目錄)items(商品清單)和其它與庫存相關的功能的配置信息另一個文件名為struts configorderxml 包含對order(訂單)和order tracking(訂單跟蹤)的設置第三個配置文件是strutsconfigxml其中含有屬於缺省的應用模塊中的一般性的功能
  配置Web部署描述符
  在Struts的早期版本中我們在Webxml中指定Struts配置文件的路徑好在這點沒變有助於向後兼容但對於多個應用模塊我們需要在Web部署描述符中增加新的配置文件的設定
  對於缺省的應用(包括Struts的早期版本)Struts framework 在Webxml文件中查找帶有config的元素用於載入Action mapping 和其它的應用程序設定作為例子以下的XML片斷展現一個典型的元素
  注如果在現有的元素中找不到config關鍵字Struts framework將缺省地使用/WEB/strutsconfigxml
  為了支持多個應用模塊(Struts 的新特性)必須增加附加的元素與缺省的元素不同的是附加的元素與每個應用模塊對應必須以config/xxx的形式命名其中字符串xxx代表該模塊唯一的名字例如在商店應用程序的例子中元素可定義如下(注意粗體字部分)
  第一個 元素對應缺省的應用模塊第二和第三個元素分別代表非缺省應用模塊catalog 和 order
  當Struts載入應用程序時它首先載入缺省應用模塊的配置文件然後查找帶有字符串config/xxx 形式的附加的初始化參數對每個附加的配置文件也進行
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28381.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.