比較開源Java Web框架JSF、Spring MVC、Stripes、Struts2、Tapestry、Wicket

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:還是未知數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章