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

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

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

    The Spark of Thinking

    Focus on Eclipse Tools.

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      3 隨筆 :: 27 文章 :: 4 評(píng)論 :: 0 Trackbacks

    看看別人的總結(jié):前4個(gè)缺點(diǎn)是致命的,

    Action

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

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

    線程模型

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

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

    Servlet 的依賴

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

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

    測(cè)試

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

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

    FormBean

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

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

    前端表達(dá)式語言

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

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

    類型的轉(zhuǎn)換

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

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

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

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

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

    驗(yàn)證處理

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

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

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

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

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

    ?


    ?

    ?

    WebWork 的項(xiàng)目資源

    下面是我在研究 WebWork 時(shí),使用的資源和研究過的項(xiàng)目,希望能對(duì)你能有幫助。

    1、? 當(dāng)然就是 WebWork 的官方網(wǎng)站: http://www.opensymphony.com/webwork/

    里面有最新的 WebWork 文檔和它的一個(gè) wiki

    2、? 一本好書: Java Open Source Programming : with XDoclet, JUnit, WebWork, Hibernate ,里面有很好的 WebWork 教程。它附帶的源代碼可以去 http://www.amazon.com/ 下載,里面的 petsoar 是一個(gè)非常好的 WebWork 開源項(xiàng)目。

    3、? Confluence http://www.atlassian.com/software/confluence )是專業(yè)的 J2EE wiki, 用于知識(shí)管理和項(xiàng)目組交流。它使用的架構(gòu)是 webwork2+Spring+Hibernate Confluence 雖是商業(yè)軟件,不過對(duì)于 OpenSource 的項(xiàng)目它全部免費(fèi)提供。它的架構(gòu)思想很值得我們?nèi)W(xué)習(xí)。

    4、? OpenReports(http://www.opensourcesoft.net) 是一個(gè)開源的項(xiàng)目,基于 Web 的報(bào)表系統(tǒng)。它用到的技術(shù)有: WebWork 2.0 Velocity Hibernate

    參考資料

    http://www.opensymphony.com/

    ?

    posted on 2006-07-21 16:59 The Spark of Thinking 閱讀(347) 評(píng)論(1)  編輯  收藏 所屬分類: Talk

    評(píng)論

    # re: 準(zhǔn)備放棄struts,因?yàn)樗且粋€(gè)拙劣的設(shè)計(jì)! 2010-05-06 19:19 鼓勵(lì)但到
    最佳解決辦法: 放棄JAVA轉(zhuǎn)向C#,SUN已被ORACLE收購(gòu),已命存實(shí)亡!!!!  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 午夜亚洲av永久无码精品| 日韩免费观看一级毛片看看| 亚洲欧洲精品无码AV| 国产精品美女久久久免费| 免费吃奶摸下激烈视频| 美女视频黄.免费网址| 亚洲国产成人五月综合网 | 久久99亚洲网美利坚合众国| 无码国产精品一区二区免费模式| 久久精品亚洲中文字幕无码网站| 99视频在线精品免费| 亚洲国产成人久久| 在线免费视频一区| 九九久久国产精品免费热6 | 久久久久久国产a免费观看黄色大片| 亚洲中文无码a∨在线观看| 免费看韩国黄a片在线观看| 亚洲αⅴ无码乱码在线观看性色| 免费看一级做a爰片久久| 中文字幕乱理片免费完整的| 亚洲福利视频网站| 成人永久免费高清| 人妻免费一区二区三区最新| 亚洲五月综合网色九月色| 国产一区视频在线免费观看| 国产在线播放线91免费 | 日本一区二区在线免费观看 | 成全影视免费观看大全二| 污污免费在线观看| 91嫩草私人成人亚洲影院| 免费高清在线爱做视频| 美女巨胸喷奶水视频www免费| 亚洲日韩乱码中文无码蜜桃臀| 日本最新免费不卡二区在线| 97在线视频免费公开视频| 亚洲av无码国产综合专区| 亚洲人成无码网站久久99热国产| 777爽死你无码免费看一二区| 亚洲欧美在线x视频| 亚洲无删减国产精品一区| 国产在线观看免费不卡|