禍兮福所倚,福兮禍所伏

          想隨便當(dāng)個(gè)小職員,隨便賺點(diǎn)錢(qián)然后隨便和一個(gè)不美也不丑的普通女孩結(jié)婚,隨便生兩個(gè)孩子,先生個(gè)女孩再生個(gè)男孩。等女兒結(jié)婚,兒子也能夠獨(dú)擋一面的時(shí)候,然后就退休,然后每天過(guò)著下著象棋和圍棋的悠閑生活。然后在自己的老婆死之前自己先老死這種生活多美好呀!

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            0 Posts :: 8 Stories :: 0 Comments :: 0 Trackbacks

              讓我們開(kāi)始看看struts的核心,這也是MVC框架的核心。Struts用the Service to Worker模式[Core]實(shí)現(xiàn)了MVC模式.

           

          控制器對(duì)象

               控制器實(shí)現(xiàn)了ActionServlet類。它集中處理所有客戶端的請(qǐng)求。它清晰的劃分了控制層的作用,處理視圖和導(dǎo)航管理,保留模型處理和操作給請(qǐng)求處理器(Command objects[Gof])處理。發(fā)布文檔中定義了所有輸入請(qǐng)求映射到中央控制器的描述,如下:

           
               action
               org.apache.struts.action.ActionServlet
           

            所有URIs請(qǐng)求以do結(jié)尾的都映射到servlet中,如下:


            action
            *.do

          匹配該模式的表單請(qǐng)求如下所示:

          http://www.my_site_name.com/mycontext/actionName.do

          映象前綴叫做擴(kuò)展映象,然而,你也可以定義路徑映象用/*結(jié)尾,如下


            action
            /do/*

          對(duì)應(yīng)請(qǐng)求:http://www.my_site_name.com/mycontext/do/action_Name

          通過(guò)配置文件可以不用改變程序代碼就可以改變映射的方式;這個(gè)映射方案也涉及到Mulitplexed Resource Mapping。對(duì)于所有表現(xiàn)層請(qǐng)求,控制器提供了一個(gè)集中處理點(diǎn)。控制器委托請(qǐng)求處理器處理每一個(gè)請(qǐng)求。請(qǐng)求處理器分配請(qǐng)求到相關(guān)的form bean處理表單校驗(yàn),處理模型。控制器和請(qǐng)求處理器的聯(lián)合構(gòu)成了控制器處理機(jī)制的核心。由控制器提供的這種抽象減輕了開(kāi)發(fā)人員創(chuàng)建公共應(yīng)用程序服務(wù)比如管理視圖,sessions,表單數(shù)據(jù)的勞動(dòng)。開(kāi)發(fā)人員可以遵循標(biāo)準(zhǔn)的機(jī)制處理例如:錯(cuò)誤異常處理,導(dǎo)航,國(guó)際化,數(shù)據(jù)驗(yàn)證,數(shù)據(jù)轉(zhuǎn)換等。

              在Struts1.1中,struts的配置通過(guò)控制器的init方法加載。配置文件控制框架的行為;包括使用ActionMapping配置對(duì)象映射URIs 到請(qǐng)求處理器,配置消息資源,通過(guò)插件處理外部資源等。實(shí)際上ActionServlet委托所有輸入請(qǐng)求給RequestProcessor,由它實(shí)際處理所有請(qǐng)求。

          分配器對(duì)象

               RequestProcessor把請(qǐng)求處理器和關(guān)聯(lián)的form bean聯(lián)合提供分派和處理客戶請(qǐng)求的功能。form bean的錯(cuò)誤創(chuàng)建,拋出異常和請(qǐng)求處理器都由RequestProcessor處理,并影響RequestProcessor的視圖管理函數(shù)。form beans協(xié)助RequestProcessor存儲(chǔ)表單數(shù)據(jù),或者傳遞視圖需要的模型數(shù)據(jù)。通過(guò)struts-config.xml的配置。所有請(qǐng)求被控制器委托給分配器,分配器是RequestProcessor對(duì)象。RequestProcessor根據(jù)action標(biāo)識(shí)檢查請(qǐng)求URI,利用ActionMapping配置對(duì)象(下一節(jié)介紹)的信息創(chuàng)建請(qǐng)求處理對(duì)象,調(diào)用requesthandler.execute方法。該方法和應(yīng)用程序的模型交互。根據(jù)處理結(jié)果,請(qǐng)求處理器會(huì)返回一個(gè)ActionForward配置對(duì)象(ActionForward是帶有元素的運(yùn)行時(shí)表示,在使用ActionForward導(dǎo)航一節(jié)解釋)給RequestProcessor。它會(huì)使用ActionForward對(duì)象通過(guò)調(diào)用RequestDispatcher.forward方法或response.sendRedirect方法激活下一個(gè)視圖。

          ActionMapping的命令模式(譯注:本節(jié)翻譯從簡(jiǎn),因?yàn)樯婕暗骄唧w語(yǔ)法。)

              struts通過(guò)xml語(yǔ)法指定URI和servlet的映射。這個(gè)實(shí)現(xiàn)和GOf的命令模式非常相似。

          模型和RequestHandlers的交互

              Action的子類用來(lái)適配請(qǐng)求和模型。一個(gè)Action的子類也叫request handler,根據(jù)具體請(qǐng)求創(chuàng)建。一個(gè)action由RequestProcessor最先解釋,并返回一個(gè)相關(guān)的request handler。對(duì)應(yīng)每個(gè)請(qǐng)求創(chuàng)建的action的父類由分配器對(duì)象創(chuàng)建。request handler實(shí)現(xiàn)了命令模式。一個(gè)客戶端請(qǐng)求在URI中封裝了想要的行為,路徑信息由分配器(RequestProcessor)提取并創(chuàng)建一個(gè)相關(guān)的請(qǐng)求處理對(duì)象實(shí)例。命令模式解耦請(qǐng)求處理和UI。

             基本的Action類提供了公用的函數(shù)處理框架相關(guān)的資源和方法,保存子類execute方法執(zhí)行時(shí)檢測(cè)到的錯(cuò)誤。這些錯(cuò)誤通過(guò)使用在用ErrorsTag顯示錯(cuò)誤一節(jié)介紹的定制的org.apache.struts.taglib.html.ErrorsTag顯示在html表單中。request handler的execute方法應(yīng)該包含控制流程處理請(qǐng)求參數(shù)和相關(guān)聯(lián)的ActionForm,它應(yīng)該封裝模型交互語(yǔ)法,提供基于模型操作結(jié)果的下一個(gè)視圖。Request handlers由RequestProcessor在第一次創(chuàng)建時(shí)緩存,給其它請(qǐng)求使用;因此request handlers不能夠包含用戶特殊的狀態(tài)信息;而且當(dāng)需要串行處理時(shí),request handlers必須加上同步機(jī)制處理資源。

                對(duì)于分布式應(yīng)用來(lái)說(shuō),一個(gè)action類包含和EJB組件中的業(yè)務(wù)邏輯交互的控制邏輯,類似于業(yè)務(wù)委托對(duì)象。業(yè)務(wù)委托使得request handlers不用直接處理復(fù)雜的分布式組件。因?yàn)樘幚矸?wù)端組件的邏輯被嵌入到業(yè)務(wù)委托中,所以業(yè)務(wù)委托設(shè)計(jì)模式使request handlers 和服務(wù)端組件松耦合。一個(gè)request handler由開(kāi)發(fā)人員在表示層編寫(xiě),然而一個(gè)業(yè)務(wù)委托通常由開(kāi)發(fā)人員在創(chuàng)建業(yè)務(wù)層服務(wù)時(shí)編寫(xiě)。對(duì)于小的非分布式應(yīng)用,action類可以包含業(yè)務(wù)邏輯。當(dāng)不需要分布式處理和業(yè)務(wù)邏輯嵌入到request handlers中時(shí),數(shù)據(jù)處理對(duì)象[Core]可以被用來(lái)提取數(shù)據(jù)處理的實(shí)現(xiàn);它提供了request handlers和數(shù)據(jù)處理層松耦合,因此保證表示層不用實(shí)現(xiàn)中間層的變化。action的基類提供了方便的方法,請(qǐng)參考http://jakarta.apache.org/struts/api/index.html.的API文檔

              用ActionForward導(dǎo)航

               ActionForward對(duì)象是配置對(duì)象。這些配置對(duì)象都有基于有意義名稱比如'success','failure'等的唯一標(biāo)識(shí)符保證可以被找到。request handlers使用封裝了URL路徑的ActionForward對(duì)象識(shí)別目的視圖。ActionForward對(duì)象根據(jù)struts-config.xml的元素創(chuàng)建。例子略。

          posted on 2005-06-09 09:08 塞翁 閱讀(153) 評(píng)論(0)  編輯  收藏 所屬分類: Java翻譯
          主站蜘蛛池模板: 什邡市| 德令哈市| 璧山县| 特克斯县| 饶阳县| 虞城县| 宽城| 新乐市| 兰西县| 龙海市| 东城区| 辽阳县| 永兴县| 康定县| 正安县| 中卫市| 南投市| 河东区| 淳安县| 固阳县| 崇礼县| 礼泉县| 小金县| 梅河口市| 南陵县| 青铜峡市| 宁明县| 象山县| 石阡县| 朝阳县| 阆中市| 南阳市| 富阳市| 县级市| 海伦市| 诸城市| 周口市| 潮州市| 镇沅| 房产| 英山县|