隨筆-40  評(píng)論-66  文章-0  trackbacks-0
          和女主角Action 對(duì)象共舞

          什么是Action?
          和常規(guī)的web 應(yīng)用相比,Struts Action 類工作起來(lái)就象一個(gè)小型的servlet。在大多數(shù)Java
          應(yīng)用中,諸如訪問業(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 類的實(shí)例。

          Action做些什么?

          一個(gè)典型的Action 的職責(zé)通常是:

          ?? ■校驗(yàn)前提條件或者聲明
          ?? ■調(diào)用需要的業(yè)務(wù)邏輯方法
          ?? ■檢測(cè)其它處理錯(cuò)誤
          ?? ■將控制路由到相關(guān)視圖


          檢驗(yàn)輸入: Action 需要做的就是確認(rèn)ActionForm 是否是需要的類型。

          調(diào)用邏輯業(yè)務(wù):

          Action 類是HTTP 與應(yīng)用系統(tǒng)中其它部分之間的適配器。最重要的是要避免將業(yè)務(wù)邏輯放入
          Action 之中。Action 類應(yīng)該只是簡(jiǎn)單地收集業(yè)務(wù)方法需要的數(shù)據(jù)并傳遞它到具體的業(yè)務(wù)對(duì)
          象。如果你同時(shí)在編寫業(yè)務(wù)類和Action 類,可能會(huì)受到要將它們編寫在一起的誘惑。一定
          要抵擋這種誘惑,并且將業(yè)務(wù)方法放入Action 可調(diào)用的單獨(dú)的類之中。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 閱讀(423) 評(píng)論(0)  編輯  收藏 所屬分類: JAVA技術(shù)
          主站蜘蛛池模板: 庄浪县| 大竹县| 龙口市| 巨鹿县| 湘潭县| 云安县| 仁化县| 凌云县| 贺州市| 西吉县| 内丘县| 紫云| 清镇市| 临邑县| 建宁县| 湘西| 洪雅县| 贵溪市| 庆城县| 安徽省| 元谋县| 玉山县| 水城县| 城市| 杭锦后旗| 洛阳市| 咸丰县| 天等县| 新丰县| 台南市| 定州市| 温泉县| 北京市| 盐山县| 调兵山市| 梁山县| 化德县| 涞源县| 武隆县| 曲靖市| 辉南县|