Java Web層架構比較

來源:互聯網
上載者:User

作者:IT168 戚祥  2007-07-13

—— 比較JSF、Spring MVC、Stripes、Struts 2、Tapestry和Wicket

   
【譯者按】這是Matt Raible在今年6月24-27號召開的JA-SIG夏季會議上所作的主題演講,Matt從眾多方面對Java
Web層架構做了一個全面、深入的比較。筆者認為這是一份及時的文檔,它對開發人員如何判定一個Web層架構的好壞、如何選擇適合自己項目的架構有極大的指
導作用。本文是對Matt Raible演講稿的整理歸納。
【作者介紹】Matt
Raible,開源架構AppFuse的發起者、主要開發人員;《Professional JSP 2.0》、《Spring
Live》等書的作者;眾多會議的演講者,MySQL User Conference, ApacheCon, ApacheCon
EU等;現任Raible Designs的CEO。

    首先,Matt以自己的實踐經驗,指出了Java Web層架構——JSF、Spring MVC、Stripes、Struts 2、Tapestry和Wicket他們各自的優、缺點:
    JSF
    優點:
    Java EE標準,這意味著有很大的市場需求和更多的工作機會
    上手快速並且相對容易
    有大量可用的組件庫 
    缺點: 
    大量的JSP標籤 
    對REST和安全支援不好 
    沒有一個統一的實現。既有SUN的實現,又有Apache的實現——MyFaces。 

    Spring MVC 
    優點: 
    對覆蓋綁定(overriding binding)、驗證(validation)等提供生命週期管理 
    與許多展示層技術/架構無縫整合:JSP/JSTL、Tiles、Velocity、FreeMarker、Excel、XSL、PDF等 
    便於測試——歸功於IoC 
    缺點: 
    大量的XML設定檔 
    太過靈活——沒有公用的父控制器 
    沒有內建的Ajax支援 Stripes 
    優點: 
    不需要書寫XML設定檔 
    良好的學習文檔 
    社區成員很熱心 
    缺點: 
    社區比較小 
    不如其他的項目活躍 
    ActionBean裡面的URL是硬式編碼 

    Struts 2 
    優點: 
    架構簡單——易於擴充 
    標記庫很容易利用FreeMarker或者Velocity來定製 
    基於控制器或者基於頁面的導航 
    缺點: 
    文檔組織得很差 
    對新特徵過分關注 
    通過Google搜尋到的大多是Struts 1.x的文檔 

    Tapestry 
    優點: 
    一旦學會它,將極大地提高生產率 
    HTML模板——對頁面設計師非常有利 
    每出一個新版本,都會有大量的創新 
    缺點: 
    文檔過於概念性,不夠實用 
    學習曲線陡峭 
    發行周期長——每年都有較大的升級 

    Wicket 
    優點: 
    對Java開發人員有利(不是Web開發人員) 
    頁面和顯示綁定緊密 
    社區活躍——有來自建立者的支援 
    缺點: 
    HTML模板和Java代碼緊挨著 
    需要對OO有較好的理解 
    Wicket邏輯——什麼都用Java搞定 接著,Matt通過採訪這些架構的作者,與他們討論各種開源的Java Web架構,並且突出各個架構的長處、聽取架構作者對其他架構的看法,希望藉此瞭解這些架構的未來發展方向。

    下列是一些被採訪者:
    JSF, Jacob Hookom
    RIFE, Geert Bevin 
    Seam, Gavin King 
    Spring MVC, Rob Harrop 
    Spring Web Flow, Rob Harrop and Keith Donald 
    Stripes, Tim Fennell 
    Struts 1, Don Brown 
    Tapestry, Howard Lewis Ship 
    Trails, Chris Nelson 
    Struts 2, Patrick Lightbody 
    Wicket, Eelco Hillenius 

    Matt對採訪做了如下總結: 
    JSF: 
    如果你想讓web應用具有類似傳統型程式的功能性,那麼JSF的標準規範和大量第三方組件庫的支援值得你 信賴。 
    Spring MVC: 
    綜合了許多不同的技術,這使得它可以被廣泛地應用到不同類型的項目中去;它可以被當作web應用開發的一個基礎平台。 
    Stripes: 
    可以被應用到存在大量複雜資料互動的程式中;有強大的類型轉換、綁定和驗證功能;可以使管理大的複雜表單以及直接映射它們到域對象變得簡單…… 
    Tapestry: 
    在中到大型項目中,表現突出(當然,你也可以只把它應用到單個頁面上),在這些項目中,你可以通過簡單地建立新的組件起到槓桿作用。 
    Struts 2: 
    通常更適合於那些希望可以真正開始做事並且願意花費大量時間來學習他們使用的開源工具的小項目組。Struts 2的目標不是那些更喜歡拖放式開發的“扶手椅程式員”。 
    Wicket: 
    非常適合於這樣的內/外部網應用:UI很複雜並且你希望可以充分利用你的開發人員資源。 

    上面的總結,基本是突出了各個架構的長處。然而,哪些又是他們不好的地方呢? Matt提出了評價一個架構好壞與否的標準: 
    Ajax支援 
    是不是內建了?是否便於使用? 
    書籤能力 
    使用者能否將某個頁面收藏起來並且可以方便地返回到該頁面? 
    驗證 
    使用是否簡單?是否支援用戶端(JavaScript)驗證? 
    可測試性 
    脫離容器測試控制器,是否足夠簡單? 
    提交和重新導向 
    架構如何處理重複提交問題? 
    國際化 
    如何支援國際化?控制器利用國際化資訊,是否容易? 
    頁面修飾 
    架構支援哪種類型的頁面修飾/組成機制? 
    社區和支援人員 
    提出問題,能否被快速地、恭敬地回答? 
    開發工具 
    是否有支援這個架構的好的工具,尤其是IDE? 
    市場需求 
    學習了這個架構,它能否幫你找到份工作? 
    崗位元量 
    在dice.com和indeed.com上,對這個架構技能的需求如何? 筆者認為這個評價標準,值得大家借鑒。 

    然後,Matt按照這些評價標準,對各個架構做了以下闡述: 
    Ajax支援 
    JSF:沒有內建的Ajax支援,需要使用ICEfaces和Ajax4JSF 
    Stripes:沒有對應的類庫,支援流輸出 
    Struts 2:內建Dojo,有用於GWT和JSON的外掛程式 
    Spring MVC:沒有對應的類庫,需要使用DWR和Spring MVC擴充 
    Tapestry:Tapestry 4.1中,有內建的Dojo 
    Wicket:有Dojo和Script.aculo.us支援 

    書籤能力 
    JSF:可以任意提交——URL甚至不被考慮 
    Stripes:使用約定,但是你可以不加理會 
    Struts 2:有命名空間的概念,這使得收藏某個頁面並返回變得容易 
    Spring MVC:允許完全的URL控制 
    Tapestry:依然存在一些醜陋的URL 
    Wicket:允許裝配(mount)頁面/URL     

    驗證 
    JSF:預設的國際化資訊醜陋,但是配置簡單 
    Stripes和Wicket:用Java類進行驗證——不支援用戶端驗證 
    Struts 2:使用OGNL完成強大的運算式驗證功能;只有在Action上指定了規則,才支援用戶端驗證。 
    Spring MVC:允許你使用公用驗證器——這是一種成熟的解決方案 
    Tapestry:有健壯的驗證功能——不需自訂就有漂亮的國際化資訊 

    可測試性 
    Spring MVC和Struts 2:允許利用mocks(例如EasyMock、jMock和Spring Mocks)簡單地進行測試 
    Tapestry:測試困難,因為頁面類被抽象、具體類被簡化 
    JSF:頁面類可以方便地被測試,實際上很像Struts 2 中的actions 
    Wicket:有WicketTester——一個強大的解決方案 
    Stripes:有Servlet API Mocks和MockRoundtrip 

    提交和重新導向 
    解決重複提交問題的最簡單方法是:在提交後重新導向 
    Spring MVC:允許你將參數加到重新導向URL上 
    Stripes、Tapestry和Wicket:有“flash式”的支援 
    Struts 2:需要一個自訂的解決方案 
    JSF:需要一個自訂的解決方案,國際化資訊很難加入到頁面bean中 

    國際化 
    JSTL的<fmt:message>標籤使國際化變得簡單;如何將國際化資訊放到控制器類中,還沒有一個統一的標準。 
    Stripes、Spring MVC和JSF:每個地區使用一個資源繫結檔案 
    Struts 2、Tapestry和Wicket:提倡把每個頁面/action用到的資源檔分開 
    JSF:需要在每個頁面上定義資源綁定資訊 
    Tapestry:<span key="key.name">標籤比較可怕 

    頁面修飾 
    Tiles能夠用於Struts 2、Spring MVC和JSF中;需要對每個頁面進行配置。 
    SiteMesh能夠用於所有的這些架構中(不推薦在JSF、Tapestry或者Wicket中使用);在設定完成後, 只需要很少的維護。 

    開發工具 
    Spring MVC:Spring IDE,但是只做XML校正,不是一個UI/web工具 
    Struts 2:Eclipse 
    Tapestry:Spindle,對編碼者非常有利 
    JSF:眾多IDE支援,並且做得越來越好 
    Stripes和Wicket:沒有任何官方工具 
    NetBeans目前支援Struts *、JSF(+Facelets)、Tapestry和Wicket,尚不支援Stripes和Spring MVC
市場需求 
   Struts 1:需求依然很大並且被廣泛使用 
   Spring MVC:越來越受關注,但大部分是因為Spring架構的一些其他特徵 
   JSF:很快地變得流行起來 
   Struts 2:正在獲得地盤,但是相關的工作機會很少 
   Tapestry:在過去的數年裡,受歡迎程度不斷增加 
   Wicket和Stripes:還是未知數 

    通過以上的比較,我想大家對在自己的項目中應該選擇哪種Web層架構,應該有了更清醒的認識。 

    最後,Matt列出了一些相關資源,也供讀者參考。 
    Struts - http://struts.apache.org 
    StrutsTestCase: http://strutstestcase.sf.net 
    Spring MVC - http://www.springframework.org 
    Spring IDE: http://www.springide.org 
    Gaijin Studio: http://gaijin-studio.sf.net 
    Struts 2 - http://opensymphony.org/webwork 
    Eclipse Plugin: http://sf.net/projects/eclipsework
IDEA Plugin: http://wiki.opensymphony.com/display/WW/IDEA+Plugin
    Tapestry - http://tapestry.apache.org 
     http://spindle.sourceforge.net 
    JSF - http://java.sun.com/j2ee/javaserverfaces and http://myfaces.apache.org 
    Java Studio Creator: http://sun.com/software/products/jscreator 
    MyEclipse: http://myeclipseide.com 
    IDEA: http://www.jetbrains.com/idea 
    SiteMesh: http://opensymphony.com/sitemesh 
    Testing Frameworks 
    JUnit: http://junit.org 
    EasyMock: http://easymock.org 
    jMock: http://jmock.org 
    jWebUnit: http://jwebunit.sourceforge.net 
    Canoo WebTest: http://webtest.canoo.com 
    Tapestry Test Assist: http://howardlewisship.com/blog/2004/05/tapestry-test-assist.html 
    AppFuse - http://appfuse.org 

    演講的最後,Matt以一句“If it works, use it!”作為結尾,可謂精闢! 

    通過此文,相信大家可以撥開當前Java Web層架構選用上的“迷霧”,見得“月明”了。 
    原演講稿請參見:http://raibledesigns.com/rd/entry/ja_sig_comparing_java_web。

 

轉自:http://tech.it168.com/j/n/2007-07-13/200707131036390_5.shtml

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.