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

          Struts vs webwork 中文

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

          Struts1.1

          WebWork2

          Action

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

          WebWorkAction類僅需要實現(xiàn)接口com.opensymphony.xwork.Action,也可以實現(xiàn)其它的接口來實現(xiàn)更多的功能,譬如:validate(驗證),localware(國際化)等。當然,它也提供了一個類ActionSupport集成了上面的所有功能,我們在開發(fā)中可以根據(jù)需要選擇。

          線程模型

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

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

          Servlet的依賴

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

          WebWorkAction不用依賴Web層和其它的容器。它可以通過ActionContext,直接去訪問RequestResponse,但這個是可選的,只有在必需的請求下使用。

          測試

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

          Webworkaction能夠通過賦予一定的屬性,就可以執(zhí)行單元測試。同時也可以使用一個mock的實例去測試,而不是通過啟動web容器來進行測試。

          FormBean

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

          Webwork 能夠動態(tài)的收集web的數(shù)據(jù)然后再賦值給bean。它也可以使用FormBean的形式,FormBean可以是普通的DTO和域?qū)ο螅挥弥匦赂鶕?jù)域?qū)ο髞砩尚碌?/span>FormBean,也不需繼承抽象類ActionForm

          前端表達式語言

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

          WebWork的表達式語言使用了功能強大的OGNL。它使用OGNL建立一個OgnlValueStack來搜索數(shù)據(jù)。Webwork前端也可以使用JSTL,但它同時支持:velocityfreemakerjspparerxml

          類型的轉(zhuǎn)換

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

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

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

          Struts處理Action的時候是基于classhierarchies,很難在action處理前和后進行操作。

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

          驗證處理

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

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

          Action執(zhí)行的控制

          Struts創(chuàng)建一個Action,如果想控制它的執(zhí)行順序?qū)浅@щy。甚至你要重新去寫Servlet來實現(xiàn)你的這個功能需求。

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


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

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


          網(wǎng)站導航:
           

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

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          IT風云人物

          文檔

          朋友

          相冊

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

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 安远县| 浦城县| 杭锦后旗| 兴城市| 六枝特区| 达日县| 常宁市| 成都市| 正阳县| 呼和浩特市| 台东县| 镇远县| 墨竹工卡县| 巫山县| 龙川县| 万山特区| 喜德县| 新泰市| 邵阳市| 定州市| 万山特区| 白山市| 白城市| 武冈市| 隆尧县| 浙江省| 沁水县| 昌都县| 山东| 辽宁省| 廊坊市| 罗源县| 汝州市| 大新县| 错那县| 龙川县| 漳州市| 四平市| 台北县| 施秉县| 定南县|