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

Struts 開發的最佳實踐

2022-06-13   來源: Java開源技術 

  本文向您講解了如何使用靈活的 Struts 框架調節 Web 應用程序開發在這裡本文作者向您展示了一些最佳實踐您可以遵循這些實踐來優化這個成熟的開源框架此外您還可以學習使用一些十分有價值的標准 Struts 組件包括 ActionFormAction 類和 ActionErrors

  Struts簡介

  Struts 是一種開源框架可用來構建 Web 應用程序它基於流行的 ModelViewController (MVC) 設計范型該框架構建在一些標准的技術之上比如 Java ServletsJavaBeansResourceBundles 和 XML並且可提供靈活和可擴展的組件Struts 以 ActionServlet 的形式實現了 Controller 層並建議使用 JSP 標記庫構建 View 層Struts 通過 Action 類提供了圍繞 Model 層的包裝器 展示了基於 ModelViewController 設計的 Struts 框架

   Struts 和 MVC

  Struts 和 MVC

  Struts 組件概覽

  首先我們在最佳實踐上下文中解釋 Struts 組件以及它們在 Web 應用程序開發中所起的作用

  Action

  應用程序的每個 Action 都會擴展 Struts 的 orgapachestrutsactionAction 類這些 Action 類為應用程序的 Model 層提供了一個接口充當圍繞業務邏輯的包裝器每個 Action 類都必須向 perform() 方法提供其特定於用例的實現perform() 方法經常返回類型 ActionForward 的一個值

  ActionForm

  應用程序的 ActionForm 擴展了 Struts 的 orgapachestrutsactionActionForm 類ActionForm 是一些封裝和驗證請求參數的簡單 JavaBean要驗證請求數據ActionForm 的 validate() 方法必須給出一個特定於該情況的實現ActionForm 作為運載工具向 Action 類提供請求數據一個 JSP 對象與各自的 ActionForm 對象相結合構成應用程序的 View 層在該層幾乎 JSP 對象的每個表單字段都映射到相應的 ActionForm 的屬性

  JSP 定制標記庫

  JSP 定制標記庫是用標記表示的一組行為的集合這是 JSP Specification 的一個強大特性它將其他應用程序層的表示區別了開來這些庫易於使用而且可以以一種類似 XML 的方式來讀取只要盡量少地在其中使用 Java scriptlet就可以輕松維護 JSP 組件Struts 提供的 JSP 標記包括 HTML邏輯和 bean 標記

  ActionErrors

  可以使用 ActionError 來支持異常處理ActionError 捕捉應用程序異常並將其傳送給 View 層每個異常都是一個 ActionError 實例的集合ActionError 可以封裝錯誤消息而 Presentation 層中的 </htmlerrors> 可以呈現 ActionError 集合內的所有錯誤消息

  最佳實踐 跨多個 ActionForm 重用數據

  熟悉了 Struts 組件之後就可以繼續學習如何充分利用這一框架首先Struts 建議將每個 JSP 對象與一個 ActionForm 相關聯後者可以封裝屏幕上顯示的數據可以通過 ActionForm 內的附加方法來訪問 JSP 對象內的表單數據清單 展示了 ActionForm 標記在 View 層中的傳統方法

  清單 使用 ActionForm

      <html:form action=/bp>

   <html:text  property=attrib />

   </html:form >

  這個 ActionForm 被稱為 BPAForm它包括屬性 attrib 及其 getter 和 setter 方法在配置文件 strutsconfigxml 中行為 /bp 通過 name 屬性映射到 bpAForm這有助於在 JSP 中顯示數據

  要實現這一最佳實踐Struts 建議您進行以下兩個操作

  創建一個 JavaBean(BPBForm)且其屬性是 BPAForm 屬性的子集還要創建這些屬性的 getter 和 setter 方法

  通過將這個 bean 與 BPAForm 關聯用 bean BPBForm 的屬性替代 BPAForm 中的屬性現在就可以通過 BPBForm 訪問 BPAForm 中的屬性子集了清單 展示了訪問的方式

  清單 訪問 JSP 中的表單屬性

      <html:form action=/bp>

   <bean:define name=bpAForm property=bpBForm id=bpB
                type=comibmdwwebarchstrutsBPBForm />

   <html:text  name=bpB property=subsetAtt />

   </html:form >

  要點

  這種實踐的主要優勢是可用於多個 ActionForm 訪問一個屬性集在遵循這一最佳實踐的同時需要記住以下幾點

  ●  Struts 實現 <beandefine/> 標記

  ●  當代碼 <%@ taglib uri=strutsbeantld prefix=bean %> 指向 strutsbeantld 時<beandefine/> 標記開始在 JSP 組件內工作

  ●  由 ActionForm 擴展而來的 BPAForm 驗證框架必須驗證 BPBForm 的數據

  當在應用程序中創建 Action 類時不需要直接擴展 orgapachestrutsactionAction可以通過擴展 orgapachestrutsactionAction 創建一個 Action 類(IntermediateAction)用於處理應用程序中的常見事務所有其他的 Action 類都擴展 IntermediateAction 類

  最佳實踐 使用 Action 類處理請求

  通常在使用這個 Struts 框架時對於 JSP 組件請求應用程序執行的每個動作應用程序都必須擴展 Struts 的 orgapachestrutsactionAction 以創建 Action 類在處理請求時單個的 Action 類與應用程序的 Model 層連接

  要實現這一最佳實踐Struts 建議您遵循以下步驟

  通過擴展 orgapachestrutsactionAction 創建一個 Action 類比如 BPAction

   通過擴展 BPAction 在 Web 應用程序中創建所有其他 Action 類

  在 BPAction 類中創建一個方法 performTask()就像在公共抽象類 ActionForward performTask(ActionMapping mapping ActionForm form HttpServletRequest request HttpServletResponse response) throws IOException ServletException 中一樣

  在 BPAction 類中向應用程序添加一個或多個泛型方法比如 serverSideValidate()考慮以下因素後決定方法的訪問修飾符

  ●  如果所有 Action 類都必須實現此方法則讓其為抽象

  ●  如果某些 Action 類提供一個特定的實現則將此方法聲明為受保護並給它一個默認實現

  在 BPAction 類中將方法 perform() 聲明為 final調用上述的泛型方法(通常在處理請求前調用該方法)現在調用 步驟 中創建的方法 performTask()

  在每個擴展 BPAction 的 Action 類添加具有特定實現的方法 performTask()

  優勢

  這一實踐有兩個主要優勢首先它避免了 Web 應用程序中每個 Action 類的冗余代碼其次通過將 Action 類的行為集中在一起使應用程序能夠更多地控制通用的任務

  最佳實踐 使用 ActionForm 處理會話數據

  在一個基於 Struts 的 Web 應用程序中每個 ActionForm 都擴展 orgapachestrutsactionActionForm 類這些 ActionForm 封裝頁面數據並提供一個驗證框架來驗證請求參數

  大多數 Web 應用程序都在會話中保持數據使其在整個應用程序過程中可用這種最佳實踐實現了這種 Web 應用程序特性它允許方法 toSession() 和 fromSession() 將會話數據移動到表單數據或從表單數據移回因此它實現了在 Web 應用程序中保持會話數據

  要遵循一最佳實踐執行以下步驟

  通過擴展 orgapachestrutsactionActionForm 創建一個名為 BPForm 的抽象類

  在 BPForm 類中添加具有訪問修飾語的方法就像在公共抽象類 void toSession(SessionData sessionData) 和 void fromSession(SessionData sessionData) 中一樣

  在每個 ActionForm 類中擴展 BPForm 並實現這些抽象方法(表單數據通過它們傳遞到會話或從會話傳回)

  相應的 Action 類可以決定這些方法的調用順序例如可以在決定 actionForward 之前調用 ActionForm 上的方法 toSession()

  何時使用這一實踐

  這一實踐最適用於會話數據是單一對象和/或每個頁操作或使用會話數據

  最佳實踐 有效處理異常

  傳統地當在 Action 類中發生應用程序異常時異常首先被寫入日志然後此類創建一個 ActionError 並在合適的作用域中存儲它然後 Action 類再將控制轉交給合適的 ActionForward清單 展示了 Action 類是如何處理異常的

  清單 Action 類中的異常處理

      try {
   //Code in Action class
   }
   catch (ApplicationException e) {
   //log exception
   ActionErrors actionErrors = new ActionErrors();
   ActionError actionError = new ActionError(egetErrorCode());
   actionErrorsadd(ActionErrorsGLOBAL_ERROR actionError);
   saveErrors(request actionErrors);
   }

  傳統的異常處理過程在每個 Action 類中保存異常信息而最佳實踐 則在處理異常時避免冗余代碼

  要使用這一最佳實踐Struts 建議您遵循以下步驟

  通過擴展 orgapachestrutsactionAction 創建一個 Action 類比如 BPAction

  通過擴展 BPAction 在 Web 應用程序中創建所有其他 Action 類

  在 BPAction 中聲明變量 ActionErrors actionErrors = new ActionErrors()

  在 BPAction 中創建方法 performTask()就像在公共抽象類 ActionForward performTask(ActionMapping mapping ActionForm form HttpServletRequest request HttpServletResponse response ActionErrors actionErrors) throws IOException ServletException 中一樣

  在 BPAction 中將方法 perform() 聲明為 final然後調用泛型方法(這些方法總是在處理請求前調用)現在調用在前一個步驟中創建的 performTask()

  在每個 Action 類中實現方法 performTask() 的同時(通過擴展 BPAction)像清單 那樣處理應用程序異常

  清單 有效使用 ActionErrors

  

  try { //Code in Action class } catch(ApplicationException appException) { //Log exception //Add error to actionErrors actionErrorsadd(ActionErrorsGLOBAL_ERROR new ActionError(appExceptiongetErrorCode())); }

  在 BPAction 中調用方法 performTask() 之後通過 saveErrors(request errors) 保存 ActionErrors

  優勢

  這一實踐主要的優勢是避免了每個處理 ActionErrors 的 Action 類中的代碼冗余

  結束語

  對開發團隊而言構建易於維護的 Web 應用程序是一項非常具有挑戰性的任務使用 Struts 等成熟的框架有助於實現通常與構建應用程序相關的基礎設施代碼Struts 框架提供了一組標准接口用於將業務邏輯插入到應用程序中此外還提供了一種跨開發團隊的一致機制用於執行用戶數據驗證屏幕導航等任務以及用於簡化開發屏幕的一組定制標記庫

  本文給出的 種最佳實踐對您充分利用這種框架的特性十分重要它們不僅能夠提高代碼的模塊化程度和應用程序的可重用性還能減少代碼冗余對於構建可擴展的 Web 應用程序這是至關重要的


From:http://tw.wingwit.com/Article/program/Java/ky/201311/27986.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.