Java Web框架比較——JSF、Spring MVC、Stripes、Struts 2、Tapestry和Wicket

Java Web層框架——JSF、Spring MVC、Stripes、Struts 2、Tapestry和Wicket他們各自的優點和缺點:

JSF
優點:
◆Java EE標準,這意味着有很大的市場需求和更多的工作機會
◆上手快速並且相對容易
◆有大量可用的組件庫
缺點:
◆大量的JSP標籤
◆對REST和安全支持不好
◆沒有一個統一的實現。既有SUN的實現,又有Apache的實現——MyFaces。
◆國內的OperaMasks還支持AJAX,以及有開發工具支持

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的標籤使國際化變得簡單;如何將國際化信息放到控制器類中,還沒有一個統一的標準。
◆Stripes、Spring MVC和JSF:每個地區使用一個資源綁定文件
◆Struts 2、Tapestry和Wicket:提倡把每個頁面/action用到的資源文件分開
◆JSF:需要在每個頁面上定義資源綁定信息
◆Tapestry:標籤比較可怕

頁面修飾
◆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:還是未知數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章