自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

開發(fā)最佳實踐:在Web應(yīng)用開發(fā)中優(yōu)化Struts框架

開發(fā) 后端
本文向您講解了如何使用靈活的Struts框架調(diào)節(jié)Web應(yīng)用程序開發(fā)。這里向您展示了一些最佳實踐,您可以遵循這些實踐來優(yōu)化這個成熟的開源框架。此外,您還可以學(xué)習(xí)使用一些十分有價值的標(biāo)準(zhǔn)Struts組件,包括 ActionForm、Action 類和 ActionErrors。

Struts是一種開源框架,可用來構(gòu)建Web應(yīng)用程序,它基于流行的Model-View-Controller (MVC2) 設(shè)計范型。該框架構(gòu)建在一些標(biāo)準(zhǔn)的技術(shù)之上,比如Java Servlets、JavaBeans、ResourceBundles和XML,并且可提供靈活和可擴(kuò)展的組件。

關(guān)于Struts更多內(nèi)容,請參閱:Struts框架應(yīng)用專題

Struts以ActionServlet的形式實現(xiàn)了Controller層,并建議使用JSP標(biāo)記庫構(gòu)建View層。Struts 通過Action類提供了圍繞Model層的包裝器。圖1展示了基于Model-View-Controller設(shè)計的Struts框架。

基于Model-View-Controller設(shè)計的Struts框架 
圖1.Struts和MVC

Struts 組件概覽

首先,我們在***實踐上下文中解釋 Struts 組件,以及它們在 Web 應(yīng)用程序開發(fā)中所起的作用。

Action

應(yīng)用程序的每個 Action 都會擴(kuò)展 Struts 的 org.apache.struts.action.Action 類。這些 Action 類為應(yīng)用程序的 Model 層提供了一個接口,充當(dāng)圍繞業(yè)務(wù)邏輯的包裝器。每個 Action 類都必須向 perform() 方法提供其特定于用例的實現(xiàn)。perform() 方法經(jīng)常返回類型 ActionForward 的一個值。

ActionForm

應(yīng)用程序的 ActionForm 擴(kuò)展了 Struts 的 org.apache.struts.action.ActionForm 類。ActionForm 是一些封裝和驗證請求參數(shù)的簡單 JavaBean。要驗證請求數(shù)據(jù),ActionForm 的 validate() 方法必須給出一個特定于該情況的實現(xiàn)。ActionForm 作為運載工具,向 Action 類提供請求數(shù)據(jù)。一個 JSP 對象與各自的 ActionForm 對象相結(jié)合,構(gòu)成應(yīng)用程序的 View 層。在該層,幾乎 JSP 對象的每個表單字段都映射到相應(yīng)的 ActionForm 的屬性。

JSP 定制標(biāo)記庫

JSP 定制標(biāo)記庫是用標(biāo)記表示的一組行為的集合。這是 JSP Specification 1.1 的一個強(qiáng)大特性;它將其他應(yīng)用程序?qū)拥谋硎緟^(qū)別了開來。這些庫易于使用,而且可以以一種類似 XML 的方式來讀取。只要盡量少地在其中使用 Java scriptlet,就可以輕松維護(hù) JSP 組件。Struts 提供的 JSP 標(biāo)記包括 HTML、邏輯和 bean 標(biāo)記。

ActionErrors

可以使用 ActionError 來支持異常處理。ActionError 捕捉應(yīng)用程序異常,并將其傳送給 View 層。每個異常都是一個 ActionError 實例的集合。ActionError 可以封裝錯誤消息,而 Presentation 層中的 </html:errors> 可以呈現(xiàn) ActionError 集合內(nèi)的所有錯誤消息。

***實踐 1. 跨多個 ActionForm 重用數(shù)據(jù)

熟悉了 Struts 組件之后,就可以繼續(xù)學(xué)習(xí)如何充分利用這一框架。首先,Struts 建議將每個 JSP 對象與一個 ActionForm 相關(guān)聯(lián),后者可以封裝屏幕上顯示的數(shù)據(jù)??梢酝ㄟ^ ActionForm 內(nèi)的附加方法來訪問 JSP 對象內(nèi)的表單數(shù)據(jù)。清單 1 展示了 ActionForm 標(biāo)記在 View 層中的傳統(tǒng)方法。

  1. 清單 1. 使用 ActionForm  
  2.    <html:form action="/bp1"> 
  3.  
  4.    <html:text  property="attrib1" /> 
  5.  
  6.    </html:form > 

這個ActionForm被稱為 “BP1AForm”,它包括屬性attrib1及其getter和setter方法。在配置文件struts-config.xml中,行為 “/bp1” 通過name屬性映射到 bp1AForm。這有助于在JSP中顯示數(shù)據(jù)。要實現(xiàn)這一***實踐,Struts 建議您進(jìn)行以下兩個操作:

創(chuàng)建一個 JavaBean(BP1BForm),且其屬性是 BP1AForm 屬性的子集,還要創(chuàng)建這些屬性的 getter 和 setter 方法。通過將這個 bean 與 BP1AForm 關(guān)聯(lián),用 bean BP1BForm 的屬性替代 BP1AForm 中的屬性?,F(xiàn)在就可以通過 BP1BForm 訪問 BP1AForm 中的屬性子集了。清單2展示了訪問的方式。

  1. 清單 2. 訪問 JSP 中的表單屬性  
  2.    <html:form action="/bp1"> 
  3.  
  4.    <bean:define name="bp1AForm" property="bp1BForm" id="bp1B" 
  5.                 type="com.ibm.dw.webarch.struts.BP1BForm" /> 
  6.  
  7.    <html:text  name="bp1B" property="subsetAtt1" /> 
  8.  
  9.    </html:form > 

要點

這種實踐的主要優(yōu)勢是可用于多個 ActionForm 訪問一個屬性集。在遵循這一***實踐的同時,需要記住以下幾點:

1.Struts 實現(xiàn) <bean:define/> 標(biāo)記。

2.當(dāng)代碼 <%@ taglib uri="struts-bean.tld" prefix="bean" %> 指向 struts-bean.tld 時,<bean:define/> 標(biāo)記開始在 JSP 組件內(nèi)工作。

3.由 ActionForm 擴(kuò)展而來的 BP1AForm 驗證框架必須驗證 BP1BForm 的數(shù)據(jù)。

4.當(dāng)在應(yīng)用程序中創(chuàng)建 Action 類時,不需要直接擴(kuò)展 org.apache.struts.action.Action,可以通過擴(kuò)展 org.apache.struts.action.Action 創(chuàng)建一個 Action 類(IntermediateAction),用于處理應(yīng)用程序中的常見事務(wù)。所有其他的 Action 類都擴(kuò)展 IntermediateAction 類。
#p#

***實踐 2. 使用 Action 類處理請求

通常,在使用這個 Struts 框架時,對于 JSP 組件請求應(yīng)用程序執(zhí)行的每個動作,應(yīng)用程序都必須擴(kuò)展Struts的org.apache.struts.action.Action以創(chuàng)建Action類。在處理請求時,單個的 Action 類與應(yīng)用程序的 Model 層連接。要實現(xiàn)這一***實踐,Struts 建議您遵循以下步驟:

1.通過擴(kuò)展 org.apache.struts.action.Action 創(chuàng)建一個 Action 類,比如 BP2Action。

2.通過擴(kuò)展 BP2Action 在 Web 應(yīng)用程序中創(chuàng)建所有其他 Action 類。

3.在 BP2Action 類中創(chuàng)建一個方法 performTask(),就像在公共抽象類 ActionForward performTask(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException 中一樣。
 
4.在BP2Action 類中向應(yīng)用程序添加一個或多個泛型方法,比如 serverSideValidate()??紤]以下因素后決定方法的訪問修飾符:

◆如果所有 Action 類都必須實現(xiàn)此方法,則讓其為抽象。
◆如果某些 Action 類提供一個特定的實現(xiàn),則將此方法聲明為受保護(hù),并給它一個默認(rèn)實現(xiàn)。

5.在 BP2Action 類中,將方法 perform() 聲明為 final。調(diào)用上述的泛型方法(通常在處理請求前調(diào)用該方法)?,F(xiàn)在調(diào)用 步驟 3 中創(chuàng)建的方法 performTask()。
在每個擴(kuò)展 BP2Action 的 Action 類,添加具有特定實現(xiàn)的方法 performTask()。

優(yōu)勢

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

#p#

***實踐 3. 使用 ActionForm 處理會話數(shù)據(jù)

在一個基于 Struts 的 Web 應(yīng)用程序中,每個 ActionForm 都擴(kuò)展 org.apache.struts.action.ActionForm 類。這些 ActionForm 封裝頁面數(shù)據(jù),并提供一個驗證框架來驗證請求參數(shù)。

大多數(shù) Web 應(yīng)用程序都在會話中保持?jǐn)?shù)據(jù),使其在整個應(yīng)用程序過程中可用。這種***實踐實現(xiàn)了這種 Web 應(yīng)用程序特性。它允許方法 toSession() 和 fromSession() 將會話數(shù)據(jù)移動到表單數(shù)據(jù)或從表單數(shù)據(jù)移回。因此,它實現(xiàn)了在 Web 應(yīng)用程序中保持會話數(shù)據(jù)。要遵循一***實踐,執(zhí)行以下步驟:

通過擴(kuò)展 org.apache.struts.action.ActionForm 創(chuàng)建一個名為 BP3Form 的抽象類。在BP3Form類中,添加具有訪問修飾語的方法,就像在公共抽象類 void toSession(SessionData sessionData) 和 void fromSession(SessionData sessionData) 中一樣。

在每個 ActionForm 類中,擴(kuò)展 BP3Form 并實現(xiàn)這些抽象方法(表單數(shù)據(jù)通過它們傳遞到會話或從會話傳回)。 相應(yīng)的 Action 類可以決定這些方法的調(diào)用順序。例如,可以在決定 actionForward 之前調(diào)用 ActionForm 上的方法 toSession()。
何時使用這一實踐,這一實踐最適用于:會話數(shù)據(jù)是單一對象和/或每個頁操作或使用會話數(shù)據(jù)。

#p#

***實踐 4.有效處理異常

傳統(tǒng)地,當(dāng)在 Action 類中發(fā)生應(yīng)用程序異常時,異常首先被寫入日志。然后此類創(chuàng)建一個 ActionError 并在合適的作用域中存儲它。然后 Action 類再將控制轉(zhuǎn)交給合適的 ActionForward。清單 3 展示了 Action 類是如何處理異常的。

  1. 清單 3. Action 類中的異常處理  
  2.    try {  
  3.    //Code in Action class  
  4.    }  
  5.    catch (ApplicationException e) {  
  6.    //log exception  
  7.    ActionErrors actionErrors = new ActionErrors();  
  8.    ActionError actionError = new ActionError(e.getErrorCode());  
  9.    actionErrors.add(ActionErrors.GLOBAL_ERROR, actionError);  
  10.    saveErrors(request, actionErrors);  
  11.    } 

傳統(tǒng)的異常處理過程在每個 Action 類中保存異常信息,而***實踐 4 則在處理異常時避免冗余代碼。要使用這一***實踐,Struts 建議您遵循以下步驟:

1.通過擴(kuò)展 org.apache.struts.action.Action 創(chuàng)建一個 Action 類,比如 BP4Action。

2.通過擴(kuò)展 BP4Action 在 Web 應(yīng)用程序中創(chuàng)建所有其他 Action 類。

3.在 BP4Action 中聲明變量 ActionErrors actionErrors = new ActionErrors();。

4.在 BP4Action 中創(chuàng)建方法 performTask(),就像在公共抽象類 ActionForward performTask(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, ActionErrors actionErrors) throws IOException, ServletException 中一樣。

6.在BP4Action中將方法perform()聲明為final。然后調(diào)用泛型方法(這些方法總是在處理請求前調(diào)用)?,F(xiàn)在調(diào)用在前一個步驟中創(chuàng)建的 performTask()。

7.在每個 Action 類中實現(xiàn)方法performTask()的同時(通過擴(kuò)展 BP4Action),像清單 4 那樣處理應(yīng)用程序異常。

  1. 清單 4. 有效使用 ActionErrors  
  2.    try   {  
  3.    //Code in Action class  
  4.    }  
  5.    catch(ApplicationException appException) {  
  6.    //Log exception  
  7.    //Add error to actionErrors  
  8.    actionErrors.add(ActionErrors.GLOBAL_ERROR,  
  9.       new ActionError(appException.getErrorCode()));  
  10.    }  

在BP4Action中,調(diào)用方法performTask()之后,通過saveErrors(request, errors)保存ActionErrors。

優(yōu)勢

這一實踐主要的優(yōu)勢是:避免了每個處理 ActionErrors的Action類中的代碼冗余。

結(jié)束語

對開發(fā)團(tuán)隊而言,構(gòu)建易于維護(hù)的Web應(yīng)用程序是一項非常具有挑戰(zhàn)性的任務(wù)。使用Struts等成熟的框架有助于實現(xiàn)通常與構(gòu)建應(yīng)用程序相關(guān)的基礎(chǔ)設(shè)施代碼。Struts 框架提供了一組標(biāo)準(zhǔn)接口,用于將業(yè)務(wù)邏輯插入到應(yīng)用程序中。此外,還提供了一種跨開發(fā)團(tuán)隊的一致機(jī)制,用于執(zhí)行用戶數(shù)據(jù)驗證、屏幕導(dǎo)航等任務(wù),以及用于簡化開發(fā)屏幕的一組定制標(biāo)記庫。

本文給出的4種***實踐對您充分利用這種框架的特性十分重要。它們不僅能夠提高代碼的模塊化程度和應(yīng)用程序的可重用性,還能減少代碼冗余。對于構(gòu)建可擴(kuò)展的Web應(yīng)用程序,這是至關(guān)重要的。

【編輯推薦】

  1. 在Struts框架下使用時間類型
  2. 實例說明Struts和Spring如何集成
  3. 對于Struts和Spring兩種MVC框架的比較
  4. Struts標(biāo)簽庫中的HTML標(biāo)簽
  5. Struts優(yōu)缺點剖析 開源是把雙刃劍?
責(zé)任編輯:王曉東 來源: IBM
相關(guān)推薦

2020-06-12 07:00:00

Web開發(fā)項目

2009-01-03 14:57:19

ibmdwLotusWeb2.0

2012-12-13 09:47:50

2024-07-01 00:00:06

ASP.NET開源

2015-08-25 09:53:22

Web開發(fā)Python框架

2010-12-02 14:32:43

Mobile Web移動互聯(lián)網(wǎng)移動Web設(shè)計

2014-03-19 14:34:06

JQuery高性能

2022-05-30 07:48:11

DevOps測試策略

2014-11-19 10:08:47

2010-03-09 13:27:23

Web 2.0應(yīng)用程序

2013-12-17 14:07:37

2021-09-17 09:30:57

鴻蒙HarmonyOS應(yīng)用

2016-01-06 11:00:18

2018-05-10 15:06:43

Java Web分層實踐

2022-01-06 09:55:19

鴻蒙HarmonyOS應(yīng)用

2009-09-27 09:41:21

Web開發(fā)

2020-07-24 07:00:00

Laravel框架Web應(yīng)用開發(fā)

2010-11-17 12:59:52

2010-11-15 09:13:22

云計算開發(fā)測試

2010-10-28 09:05:42

SilverlightXAML
點贊
收藏

51CTO技術(shù)棧公眾號