和女主角Action 對(duì)象共舞
什么是Action?
和常規(guī)的web 應(yīng)用相比,Struts Action 類(lèi)工作起來(lái)就象一個(gè)小型的servlet。在大多數(shù)Java
應(yīng)用中,諸如訪問(wèn)業(yè)務(wù)層的任務(wù)、錯(cuò)誤處理等任務(wù)均是由servlet 承擔(dān)的。在一個(gè) Struts 應(yīng)
用中,servlet 扮演著一個(gè)分派器的角色。而Action 對(duì)象則干實(shí)際的工作。象 servlets 一樣,
Action 對(duì)象是多線程的。每個(gè)應(yīng)用只需要一個(gè)Action 類(lèi)的實(shí)例。
Action做些什么?一個(gè)典型的Action 的職責(zé)通常是:
?? ■校驗(yàn)前提條件或者聲明
?? ■調(diào)用需要的業(yè)務(wù)邏輯方法
?? ■檢測(cè)其它處理錯(cuò)誤
?? ■將控制路由到相關(guān)視圖檢驗(yàn)輸入: Action 需要做的就是確認(rèn)ActionForm 是否是需要的類(lèi)型。
調(diào)用邏輯業(yè)務(wù):Action 類(lèi)是HTTP 與應(yīng)用系統(tǒng)中其它部分之間的適配器。最重要的是要避免將業(yè)務(wù)邏輯放入
Action 之中。Action 類(lèi)應(yīng)該只是簡(jiǎn)單地收集業(yè)務(wù)方法需要的數(shù)據(jù)并傳遞它到具體的業(yè)務(wù)對(duì)
象。如果你同時(shí)在編寫(xiě)業(yè)務(wù)類(lèi)和Action 類(lèi),可能會(huì)受到要將它們編寫(xiě)在一起的誘惑。一定
要抵擋這種誘惑,并且將業(yè)務(wù)方法放入Action 可調(diào)用的單獨(dú)的類(lèi)之中。Java 虛擬機(jī)(JVM)
針對(duì)這種方法調(diào)用作了優(yōu)化;性能損失可以忽略不計(jì)。
同時(shí)你也得到了一些設(shè)計(jì)上的優(yōu)勢(shì)
Action檢測(cè)錯(cuò)誤:
Struts具有一個(gè)設(shè)計(jì)良好的錯(cuò)誤處理系統(tǒng),允許你可以:
??■ 同時(shí)截獲幾個(gè)錯(cuò)誤
??■ 在請(qǐng)求中傳遞錯(cuò)誤數(shù)據(jù)包
??■ 顯示本地化信息
這個(gè)處理流程涉及到兩個(gè)對(duì)象 (ActionErrors 和 ActionError) 和一個(gè)注冊(cè)錯(cuò)誤的工
具方法(saveErrors) 。其它兩個(gè)對(duì)象 (MessageResources 和 一個(gè)定制標(biāo)簽)則用來(lái)顯
示錯(cuò)誤信息
注冊(cè)錯(cuò)誤總體流程歸結(jié)為:
??1 創(chuàng)建一個(gè)空的ActionErrors 實(shí)例
??2 在錯(cuò)誤發(fā)生時(shí),為錯(cuò)誤信息添加關(guān)鍵字;
??3 檢查是否添加了某些信息
??4 保存ActionErrors 集合對(duì)象到請(qǐng)求中
??5 ?轉(zhuǎn)發(fā)控制到錯(cuò)誤頁(yè)面以顯示信息
??6? 否則,正常繼續(xù)
例如
ActionErrors?errors?=?new?ActionErrors();

try?
{
//?*?調(diào)用業(yè)務(wù)對(duì)象?*
}

catch?(ModelException?e)?
{
errors.add(ActionErrors.GLOBAL_ERROR,
new?ActionError("error.detail",e.getMessage()));
}

if?(!errors.empty())?
{
saveErrors(Request,?errors);
return?(mapping.findForward("error"));
}
//?*?正常繼續(xù)?*
posted on 2006-12-14 10:32
Super·shen BLOG 閱讀(422)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
JAVA技術(shù)