21

我计划开始学习 Java Web 框架(我喜欢 Java API)我已经使用过 Rails 和 Django。

我想要一些接近 Java 但又没有 J2EE 复杂性的东西。

我发现了 2 个可能对我有好处的框架:

圣杯

Grails 看起来很棒,它使用 Groovy,它比 Java 用于 Web 应用程序更好(我认为..),但它比基于纯 Java 的框架(Hibernate、Strut、Spring)慢 它看起来很容易部署(发送 .war 就可以了!),普惠制很棒!调试起来有点困难(需要在每次修改时重新启动服务器,并且堆栈跟踪包含 Java 和 Groovy 跟踪的混合,这并不总是最容易理解的)

玩!

这个框架看起来也很棒;它比 Grails 快(它使用 Java),但我不太喜欢它使用 Java 的方式,它修改了源代码以将属性调用转换为 setXXX/getXXX,我不喜欢那样...该框架还具有缓存Grails 没有的功能。我不太喜欢模板引擎。调试也更轻松(无需重启服务器,stacktraces更清晰)

你有什么建议吗?我正在寻找易于学习的东西(我有很多 Ruby 经验,没有太多 Java 经验,但我喜欢 Java API),功能齐全(所有可用的 Java 库都没有问题,但如果它是捆绑和集成的我更喜欢),具有良好的可扩展性并且不会太慢(比 Ruby 快) 理想情况下,我想使用一个具有良好社区的框架来轻松找到支持。

PS:我对 JRuby on Rails 不感兴趣

4

6 回答 6

29

我从 Grails 切换到 Play 并且从未回头。我对 Grails 最大的问题是整体的健壮性和开发人员的可用性。大多数时候,我被以下事实所困扰,即 Grails 将 Spring MVC 和 Hibernate 的常用堆栈粘合在一起,同时试图隐藏这一事实并为您提供类似 Rails 的 API(我的个人意见)。这样做的问题是,一旦超出了琐碎的样本,它很容易损坏并且对我不起作用。用它开发就像在鸡蛋上行走(对我来说)。每当我在谷歌上搜索所需功能的文档时,我并没有被重定向到示例、教程、博客,而是被重定向到 Grails JIRA,向我解释了为什么该功能不适用于我的用例,并且由于之前的两个版本,该错误仍未解决我正在使用。

虽然这可能不是每个开发人员的整体体验(我写这篇文章不是为了抨击 Grails,而是在这里提供我的经验),但我需要一些对我有帮助并且不会妨碍我或在我最需要它。那是我找到 Play 的时候,并且在我发现它(大约 1.0 版本)后迅速将我的应用程序迁移到它。

到目前为止,这是一次很棒的旅程,在我的 Web 开发生涯中,我第一次不再关注其他框架,试图找到我想要更好的东西。

如果我不得不以 Play 比 Grails 做得更好的一件事结束——至少对我而言——那将是 Play 是从头开始构建的,并且考虑到了开发人员的可用性。它不会牺牲企业流行语的易用性。它有胆量丢弃不适合这种范式的东西(例如,在开发过程中放弃基于 Servlet 的运行时以加快周转速度)。它愿意做出妥协以保证令人敬畏。在我找到 Play 之前,我只在 Rails 或 Django 等社区看到过这种情况。

于 2011-03-08T17:05:04.653 回答
23

我建议Grails。它拥有比游戏框架更大的社区(约 350 个插件几乎涵盖了所有基本需求)。此外,grails 几乎完全用 Java 编写,它只允许您使用 Groovy 进行特定领域的实现。

如果您确实遇到了性能问题,您创建的 groovy 页面是瓶颈,您总是可以切换到 Java 实现。然后你就和你一直使用 Play 框架一样。您已经通过推迟 Java 中的编码来优化您的开发时间,直到您知道您确实需要这样做(根据我的经验,这非常罕见)。

我也不确定您在哪里听说每次修改都需要重新启动服务器,但实际上并非如此。Grails 支持重新加载控制器/gsps/服务/域对象等,而无需重新启动服务器。

混合堆栈跟踪可能会有点长,但工具供应商(如 Intellij)最近进行了一些改进,去除了您不关心的所有堆栈跟踪部分。

从 0.5 天起我就一直在使用 grails,并且对这个平台非常满意。

于 2010-03-27T19:16:20.313 回答
3

请注意,播放!从 1.1开始,框架现在支持使用 Scala

于 2010-11-15T03:52:52.270 回答
3

根据我使用 Play 的经验,这是一个很棒的框架。我最喜欢的功能是很酷的控制器系统和模板系统——两者都很简单,但功能丰富且强大。

然而,Play 最重要的好处绝对是快速的开发周期,几乎不需要在代码更改时重新加载。但是如果你不小心,这种伟大不会持续太久,缓慢会最终蔓延到你的代码中。

这是为什么?在 Play 中,一些插件的初始化非常繁重,特别是 EJB (Hibernate) 和 Spring。在加载新代码之前,每次代码更改都会重新运行这些插件的初始化。因此,随着您的模型和系统配置的增长,这种繁重的初始化开始严重减慢您的开发速度。在我使用的系统中,20 秒是在 kickass 笔记本电脑上运行的虚拟机的典型启动时间。

What you can do to avoid this depends on your application, e.g. if you're building a NoSQL application then then EJB plugin should not give you trouble. Spring can be replaced with a custom hard-coded Java plugin, which IMHO is also easier to maintain, or run a Groovy script if scriptability is that important. In any case, watch out for these problems and kill them while the're young - and be sure not to be running your own bulky initializations on every refresh.

于 2011-12-04T22:24:15.130 回答
1

如果您以前使用过 Ruby 和 Python,那么您可能会比 Play 更喜欢 Grails。一旦习惯了这些动态语言,就很难再回到 Java。

于 2010-03-27T19:15:35.633 回答
0

Scala上也有Lift。 Imho scala 是最好的静态类型语言,而 lift 是一个非常好的框架(对于静态类型语言)。

于 2010-03-27T18:10:44.997 回答