OMG,到底在尋找什么..................
          (構(gòu)造一個(gè)完美的J2EE系統(tǒng)所需要的完整知識(shí)體系)
          posts - 198,  comments - 37,  trackbacks - 0

          Struts vs webwork 中文

          這是前一篇文章的譯文,來(lái)自moxie的《WebWork教程-0.90版》
          歡迎一起探討WEB Framework。http://www.aygfsteel.com/soochow_hhb/?

          Struts1.1

          WebWork2

          Action類(lèi)

          Struts里面,每一個(gè)Action類(lèi)必需要繼承一個(gè)抽象的類(lèi)org.apache.struts.action.Action。這個(gè)在Java編程中會(huì)引來(lái)一些問(wèn)題,就是關(guān)于多種繼承的問(wèn)題。

          WebWorkAction類(lèi)僅需要實(shí)現(xiàn)接口com.opensymphony.xwork.Action,也可以實(shí)現(xiàn)其它的接口來(lái)實(shí)現(xiàn)更多的功能,譬如:validate(驗(yàn)證),localware(國(guó)際化)等。當(dāng)然,它也提供了一個(gè)類(lèi)ActionSupport集成了上面的所有功能,我們?cè)陂_(kāi)發(fā)中可以根據(jù)需要選擇。

          線程模型

          Struts Action必需是threadsafe方式,它僅僅允許一個(gè)實(shí)例去處理所有的請(qǐng)求。所以action用到的所有的資源都必需統(tǒng)一同步,這個(gè)就引起了線程安全的問(wèn)題。

          WebWork中,每個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)Action,因此沒(méi)有線程的安全問(wèn)題。實(shí)際上Servlet容器對(duì)每個(gè)請(qǐng)求也產(chǎn)生多個(gè)對(duì)象,它也沒(méi)有證明對(duì)性能和垃圾回收產(chǎn)生太多的影響。

          Servlet的依賴

          Struts處理Action時(shí)必需要依賴ServletRequest ServletResponse,所有它擺脫不了Servlet容器。

          WebWorkAction不用依賴Web層和其它的容器。它可以通過(guò)ActionContext,直接去訪問(wèn)RequestResponse,但這個(gè)是可選的,只有在必需的請(qǐng)求下使用。

          測(cè)試

          Struts的每個(gè)Action都同Web層耦合在一起,這樣它的測(cè)試依賴于Web容器,單元測(cè)試也很難實(shí)現(xiàn)。不過(guò)有一個(gè)Junit的擴(kuò)展工具Struts TestCase可以實(shí)現(xiàn)它的單元測(cè)試。

          Webworkaction能夠通過(guò)賦予一定的屬性,就可以執(zhí)行單元測(cè)試。同時(shí)也可以使用一個(gè)mock的實(shí)例去測(cè)試,而不是通過(guò)啟動(dòng)web容器來(lái)進(jìn)行測(cè)試。

          FormBean

          Struts要求有FormBean對(duì)應(yīng)每一個(gè)表單,而且FormBean必需繼承抽象類(lèi)ActionForm。而使用DynaBeans實(shí)際上沒(méi)有太大的意義。不能夠很好的處理現(xiàn)有的模型。

          Webwork 能夠動(dòng)態(tài)的收集web的數(shù)據(jù)然后再賦值給bean。它也可以使用FormBean的形式,FormBean可以是普通的DTO和域?qū)ο?,它不用重新根?jù)域?qū)ο髞?lái)生成新的FormBean,也不需繼承抽象類(lèi)ActionForm。

          前端表達(dá)式語(yǔ)言

          Struts集成了JSTL,所以它主要使用JSTL的表達(dá)式語(yǔ)言來(lái)獲取數(shù)據(jù)。可是JSTL的表達(dá)式語(yǔ)言在Collection和索引屬性方面處理顯得很弱。

          WebWork的表達(dá)式語(yǔ)言使用了功能強(qiáng)大的OGNL。它使用OGNL建立一個(gè)OgnlValueStack來(lái)搜索數(shù)據(jù)。Webwork前端也可以使用JSTL,但它同時(shí)支持:velocity、freemaker、jspparer、xml

          類(lèi)型的轉(zhuǎn)換

          StrutsFormBean把所有的數(shù)據(jù)都作為String類(lèi)型,它可以使用工具Commons-Beanutils進(jìn)行類(lèi)型轉(zhuǎn)化。但它的轉(zhuǎn)化都是在Class級(jí)別,而且轉(zhuǎn)化的類(lèi)型是不可配置的。類(lèi)型轉(zhuǎn)化時(shí)的錯(cuò)誤信息返回給用戶也是非常困難的。

          WebWork使用OGNL進(jìn)行類(lèi)型轉(zhuǎn)化,提供了所有基本類(lèi)型的轉(zhuǎn)化功能。類(lèi)型轉(zhuǎn)化可以直接對(duì)一個(gè)Class進(jìn)行(Class級(jí)別)轉(zhuǎn)化,也可以對(duì)Class的字段進(jìn)行類(lèi)型轉(zhuǎn)化。它使用攔截器可以很容易的將類(lèi)型轉(zhuǎn)化的錯(cuò)誤信息返回給用戶,而且錯(cuò)誤信息可以對(duì)應(yīng)到一個(gè)相應(yīng)的字段。

          對(duì)Action 執(zhí)行前和后的處理

          Struts處理Action的時(shí)候是基于classhierarchies,很難在action處理前和后進(jìn)行操作。

          Webwork2 允許您處理Action可以通過(guò)攔截器,就是在每一個(gè)Action處理前或者后進(jìn)行其它操作。它的攔截器可以在配置文件中動(dòng)態(tài)添加,這樣Action和攔截器之間完全解藕,更好的實(shí)現(xiàn)了組件化。

          驗(yàn)證處理

          Struts的驗(yàn)證是調(diào)用FormBeanvalidator()方法,其實(shí)就是對(duì)FormBean的驗(yàn)證。它一般使用框架Commons Validation進(jìn)行數(shù)據(jù)驗(yàn)證處理。它使用了一個(gè)全局的配置文件validation.xml定義了FormBean的驗(yàn)證信息。StrutsFormBean屬性都被認(rèn)為是String類(lèi)型,所以它在驗(yàn)證時(shí)也需要額外的類(lèi)型轉(zhuǎn)化。

          WebWork使用Xwork的驗(yàn)證框架進(jìn)行驗(yàn)證處理,它可以通過(guò)配置攔截器來(lái)激活。它可以為每個(gè)需要驗(yàn)證的Class指定一個(gè)xml驗(yàn)證文件,也可以為一個(gè)Class在不同的情況指定不同的xml驗(yàn)證文件。WebWork證可以給每個(gè)Action類(lèi)指定對(duì)應(yīng)的驗(yàn)證文件,也可以給Action的字段去指定驗(yàn)證文件。通過(guò)攔截器來(lái)組裝Action和其驗(yàn)證文件,使它們之間完全解藕。

          對(duì)Action執(zhí)行的控制

          Struts創(chuàng)建一個(gè)Action,如果想控制它的執(zhí)行順序?qū)?huì)非常困難。甚至你要重新去寫(xiě)Servlet來(lái)實(shí)現(xiàn)你的這個(gè)功能需求。

          在這個(gè)方面,WebWork的攔截器棧提供了強(qiáng)大的功能。Action的所有切面功能都有攔截器來(lái)實(shí)現(xiàn)(比如:取得request請(qǐng)求參數(shù)、驗(yàn)證處理等),這樣你就可以用攔截器棧來(lái)組織攔截器的執(zhí)行順序。例如:你需要在使用request請(qǐng)求參數(shù)來(lái)設(shè)置Action屬性之前,使用IoC框架設(shè)置Action的屬性,反之已然。這時(shí),你就可以為packageAction指定一個(gè)攔截器棧來(lái)實(shí)現(xiàn)。


          原貼:http://www.aygfsteel.com/soochow_hhb/archive/2005/05/29/5311.aspx
          posted on 2006-12-15 11:40 OMG 閱讀(231) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Struts

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          <2006年12月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿(1)

          隨筆分類(lèi)

          隨筆檔案

          IT風(fēng)云人物

          文檔

          朋友

          相冊(cè)

          經(jīng)典網(wǎng)站

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 石城县| 宁津县| 大石桥市| 平凉市| 镇康县| 达拉特旗| 青岛市| 师宗县| 城步| 图们市| 大余县| 安吉县| 滕州市| 龙泉市| 泊头市| 山西省| 西平县| 金寨县| 邓州市| 和龙市| 斗六市| 广汉市| 会昌县| 绥化市| 北辰区| 读书| 清丰县| 河北省| 老河口市| 丹阳市| 普定县| 临西县| 广东省| 饶河县| 梅州市| 兴业县| 久治县| 刚察县| 舒兰市| 乐亭县| 克拉玛依市|