<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)論
      

    主站蜘蛛池模板: 亚洲一区二区三区无码中文字幕| 亚洲第一区在线观看| 成人免费无码大片A毛片抽搐| 卡1卡2卡3卡4卡5免费视频| 国产精品免费看久久久无码| 亚洲精品国精品久久99热| 亚洲国产成人片在线观看无码| 亚洲Aⅴ无码专区在线观看q| 性xxxx黑人与亚洲| 美女被艹免费视频| 国产好大好硬好爽免费不卡| 91视频国产免费| 亚洲综合精品网站| 亚洲精品韩国美女在线| 亚洲av无码一区二区三区人妖| 国产精品极品美女自在线观看免费| 91精品国产免费网站| 成年女人永久免费观看片| 亚洲色偷拍另类无码专区| 亚洲图片中文字幕| 日本高清不卡中文字幕免费| 无码国产精品一区二区免费3p| 永久免费视频v片www| 亚洲av无码国产精品夜色午夜| 亚洲欧美日韩国产成人| 免费看无码特级毛片| 成人毛片免费在线观看| 亚洲精品一品区二品区三品区| 一区二区亚洲精品精华液| 国产日韩在线视频免费播放| 日韩精品福利片午夜免费观着| 亚洲中久无码不卡永久在线观看| 国产91在线|亚洲| 成人免费无码H在线观看不卡| 免费一本色道久久一区| 亚洲国产精品无码中文字| 久久久久久亚洲av无码蜜芽| 午夜无码A级毛片免费视频 | 国产jizzjizz免费视频| 亚洲视频在线播放| 九九免费精品视频在这里|