<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

    Struts vs webwork 中文

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

    Struts1.1

    WebWork2

    Action

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

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

    線程模型

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

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

    Servlet的依賴

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

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

    測試

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

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

    FormBean

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

    Webwork 能夠動態的收集web的數據然后再賦值給bean。它也可以使用FormBean的形式,FormBean可以是普通的DTO和域對象,它不用重新根據域對象來生成新的FormBean,也不需繼承抽象類ActionForm

    前端表達式語言

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

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

    類型的轉換

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

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

    Action 執行前和后的處理

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

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

    驗證處理

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

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

    Action執行的控制

    Struts創建一個Action,如果想控制它的執行順序將會非常困難。甚至你要重新去寫Servlet來實現你的這個功能需求。

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


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

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

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    IT風云人物

    文檔

    朋友

    相冊

    經典網站

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 青青青免费国产在线视频小草| 亚洲av最新在线网址| 亚洲综合色丁香婷婷六月图片 | 亚洲色婷婷六月亚洲婷婷6月| 亚洲aⅴ天堂av天堂无码麻豆| 成人无码区免费A片视频WWW| 亚洲综合激情另类小说区| 人人揉揉香蕉大免费不卡| 亚洲日韩精品一区二区三区无码| 四虎一区二区成人免费影院网址| 暖暖日本免费在线视频 | 亚洲人成电影亚洲人成9999网| 中文在线免费不卡视频| 亚洲一区二区三区无码影院| 美女无遮挡免费视频网站| 国产福利免费观看| 亚洲精华国产精华精华液网站| 最近最好的中文字幕2019免费| 亚洲av无码片区一区二区三区| 亚洲一级毛片免费看| 911精品国产亚洲日本美国韩国 | 国产综合亚洲专区在线| 免费无码专区毛片高潮喷水| 免费在线精品视频| 黄色a三级免费看| 亚洲成人高清在线| 日韩毛片在线免费观看| 亚洲精品麻豆av| 国产V片在线播放免费无码| 亚洲伊人久久成综合人影院| 一区二区视频免费观看| 国产亚洲精品福利在线无卡一| 亚洲国产免费综合| 青青草原亚洲视频| 成人影片一区免费观看| 亚洲AV日韩AV天堂一区二区三区| 日韩免费无码一区二区三区 | 国产精品亚洲小说专区| 又黄又爽一线毛片免费观看| 日日狠狠久久偷偷色综合免费 | 免费人成视频x8x8入口|