2010-11-10 70 views
24

我完全不熟悉Java Web開發,我想選擇一個好的Java Web框架來學習。我發現了一些關於Apache Wicket frameworkPlayframework的非常好的回聲。我決定去找一個他們的;但我需要選擇;-)Wicket或Playframework?

那麼,選擇什麼,爲什麼?

編輯

我的要求:

  • 我有一個很好的經驗與Django的發展,所以類似的框架將是巨大的,
  • 我需要一個框架,可以與其他主流互動Java的好東西(庫,工具等),所以我可以利用Java真正提供的優勢。
+0

您有什麼要求? – Mot 2010-11-10 20:08:33

回答

51

Wicket和Play是兩種非常不同類型的框架。

Play是一個MVC框架,您可能會對來自Django的感覺很熟悉。像Django一樣,它提供的不僅僅是Web位,還提供了基於JPA的ORM框架,腳手架工具以及可能還有更多(我沒有實際經驗)。他們在他們的網站上有一個很棒的教程,你可能會在那裏看到Django的相似之處。 Wicket是一個面向組件的框架(如JSF和Tapestry),主要集中在面向對象的設計上。它本身也是MVC,但頁面通常是通過構建自包含和可重用組件(視圖和控制器,可插拔模型)構建的。這些組件可以通過標準繼承和組合來擴展,標記與代碼非常乾淨地分離並且容易修改。

Wicket可以自動管理事件回調和狀態,這樣就不會有根本想不起你的網站,無論你的網頁有多複雜。一個可點擊的按鈕,一個簡單的例子是去時,它的點擊(非常有用)一個遠:

// In a page constructor 
    add(new Link("link") { 
     public void onClick() { 
      setVisible(false); 
     } 
    }); 

我想強調的是,你不必使用服務器端的狀態,而且它很可能使用Wicket作爲一個「正常」的MVC框架,如果你願意的話(是的,很容易得到漂亮的網址)。

Wicket項目只關注核心Web框架,沒有額外的「細節」,如特殊的ORM支持或腳手架。我個人同意Wicket項目的哲學,但是對於新開發人員來說,做預構建組件有點稀缺的時候,做「簡單」的東西比如可排序和可分頁的表可能有點令人生畏。 Wicket的學習和生產力曲線可能有點陡峭,但好處在於,一旦您製作出符合您需求的組件(和「行爲」 - 更長的故事),它們就極具可重用性。

儘管我個人喜歡Wicket,但我有一種預感,你可能會在Play上最好。你的問題表明你想要一個能夠訪問Java庫的「Django」,在這種情況下,我認爲Play(或者其他一些Java MVC)是安全的選擇。另一方面,也許你一直在使用Django,因爲你不知道Wicket有多麼強大。 ;)如果您在項目中提供了更多信息,我們將能夠提供更合適的答案。作爲一個副節點:由於Play不是非常主流(至少現在),我還會考慮Grails,它具有強大的商業背景和更多開箱即用的模塊。

+0

非常豐富的答案,謝謝。 – wassimans 2010-11-11 06:42:36

17

玩!旨在讓來自Python和PHP等腳本語言的開發人員感到舒適。它提供了自己的構建系統和管理腳本,有點像Rails或Django。現有的構建工具和基礎設施(例如通常用於Java-land中的依賴關係管理的Maven存儲庫)將無法與Play完美整合。

Wicket對於Java開發者來說更​​加舒適。它不提供特殊的工具,因此如果您有偏好,可以更容易地集成到特定的構建工具中(並且有許多構建工具提供諸如Java生態系統中可用的自動依賴關係檢索之類的東西。)

所以這兩種選擇之間有相當大的差異:)如果你能弄清楚哪些經驗會讓你受益最多,那麼這個決定應該很清楚。

+1

很棒的答案!去直接問題的點 – opensas 2011-02-17 04:25:20

+1

好的迴應。像Play這樣的MVC顯然會對其他MVC的用戶更爲熟悉。雖然我不得不說,一旦你學習了Wicket的生活方式,你將永遠不會想再次看到MVC! Wicket的面向對象,事件驅動的性質,以及其內置的AJAX支持,讓您可以做一些非常複雜的事情,這些事情在MVC中會非常殘忍和難以維護。國際化在Wicket中也很棒,不使用JSP也是一個優點。 :) – spaaarky21 2011-12-31 21:17:47

7

如果您的系統僅用於Web層,請播放!框架非常適合。 But,如果您的數據模型不僅僅適用於Web,也許是exported as REST by Spring with CXF,並且由GWT或其他Web服務使用,並且您希望確保與Web層一致的狀態,Wicket(使用Spring/Hibernate)是一個不錯的選擇。

東西我不覺得太好玩!是緩存機制。您必須手動命名/插入/檢索/無效/清除緩存。這將使整個架構容易出錯。雖然帶彈簧/ JPA(休眠)/ ehcache(或其他提供者)的wicket,您可以爲上層(web/REST ...)定義一致的緩存/ dao層,這不會造成狀態不一致。

wicket的另一個優點是它內置了由Java支持的AJAX支持。儘管這些AJAX的狀態是在服務器端維護的(可能有點呆滯),但如果您不想學習JavaScript,您仍然可以構建一個「不太糟糕」的AJAX頁面。

With Play!如果你不瞭解JS,也不想學習它,不想操縱繁瑣的DOM,你只能建立一個'平均'的網站。 OTOH,如果你熟練使用JS/jQuery,你可以選擇Play! 。

+0

您能否詳細介紹一下緩存的不一致性以及wicket如何處理它們?我想知道如何才能改善它的緩存管理。謝謝。 – opensas 2011-08-31 12:15:49

+0

嗨,你可以參考我的slideshare:http://www.slideshare.net/smallufo/play-framework-for-javaee-developers。從第40頁開始。 – smallufo 2011-09-06 13:43:09

+0

優秀的材料,smallufo。順便說一句,第61頁的方法工作正常嗎?在application.conf中應該有一個設置來實現這個...我有一個類似的問題,我用自己的緩存系統處理它,添加「依賴關係」。我會讓這兩個緩存項目依賴於「用戶」,並且每次修改(或添加或刪除)任何用戶時,都會根據用戶使每個條目無效。不幸的是,擁有這樣的依賴系統對於ehcache來說並不是那麼容易。 – opensas 2011-09-08 11:44:49

3

我正在使用PLay!很多,並使用Wicket進行一點評估。 我的經驗是,您必須編寫更多的代碼才能完成與Wicket完成的相同工作。 Wicket你有更多的「間接」。我個人更喜歡代碼儘可能少的「儀式」,這很容易遵循。

玩!架構師也將Scala支持添加到Play!中,我認爲這是一個好主意,因爲Scala可以與Java代碼和庫完全互操作,但是要比Java先進得多。

+1

着名的遺言! Akka同時支持Scala和Java API,但相信我的Java API是「家中的客人」,即它不像Scala那樣得到很好的支持。也許玩!將更愛他們的Java用戶... – 2012-01-18 14:28:29