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

          什么是Action?
          和常規(guī)的web 應(yīng)用相比,Struts Action 類工作起來就象一個(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)簽)則用來顯
          示錯(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ò)誤頁面以顯示信息
          ??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 閱讀(429) 評(píng)論(0)  編輯  收藏 所屬分類: JAVA技術(shù)
          主站蜘蛛池模板: 宜章县| 正镶白旗| 黄冈市| 南城县| 年辖:市辖区| 淅川县| 闽清县| 工布江达县| 铁岭县| 治多县| 双鸭山市| 六盘水市| 达日县| 宝鸡市| 巫溪县| 大冶市| 棋牌| 镇雄县| 盈江县| 简阳市| 马龙县| 岳西县| 静海县| 双桥区| 突泉县| 夏河县| 治县。| 双城市| 德阳市| 大连市| 北碚区| 万全县| 贵溪市| 辛集市| 鞍山市| 张家港市| 浦县| 宁南县| 班戈县| 图木舒克市| 万州区|