2010-11-10 49 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