85

我正在考虑使用 Java 创建自己的网站,并试图决定使用什么框架。但是,快速搜索 Java 框架会返回 50 多个可供选择的框架!

我的网站一开始只是为了让我自己享受构建它,但如果它变得流行,它具有一定的可扩展性,或者至少能够为此重新设计会是一件好事。

更流行的框架之间的主要区别是什么?是否存在一个明显优于其他的实例?例如,高流量的企业应用程序与低流量的小型应用程序。我也想知道有些是否比其他的更容易学习和使用。

有没有人对其中一些框架有经验并可以提出建议?选择的数量之多是否只是作为尽可能避免基于 Java 的 Web 开发的预警?

4

24 回答 24

59

我已经相当广泛地使用了Tapestry 3WicketEchoJSF 。我真的建议您仔细检查一下,然后选择对您来说最简单的一种,并且最适合您喜欢的工作方式。

其中,对我来说最舒服的是Wicket,因为组件构建的轻量级特性和页面模板的简单性。如果您使用自己的数据库代码而不是 Hibernate 或其他框架(我对 Wicket Hibernate 或 Spring Integration 从来没有完全满意过),那就加倍了。

如果您不介意用 Java 编写所有布局,Echo就很棒。我知道现在情况不同了,但我仍然认为该产品服务于一个相当狭窄的利基市场。他们似乎在每个主要版本中都改变了开发模型。

Tapestry是一个很棒的产品,但它的开发模式显然与其他产品有很大不同,因为它主要由一个家伙领导。Howard Lewis Ship 无疑非常聪明,但我对他们决定基本上忘记与每个版本的向后兼容性感到失望。不过,再一次,对于您的需求,这可能并不重要,而且我一直发现 Tapestry 产品令人愉悦。

JSF已经出现多年,但仍然感觉像是一个Struts人为解决 Struts 的所有问题而构建的东西。没有真正理解 Struts 的所有问题。尽管该产品显然非常灵活,但它仍然具有未完成的感觉。我使用它并且对它有一些喜爱,对它的未来寄予厚望。我认为在 JEE6 中交付的下一个版本(2.0)将真正将其引入自己的版本,具有新的模板语法(类似于 Facelets)和简化的组件模型(仅在一个文件中的自定义组件......最后)。

当然,还有一百万个较小的框架和工具有自己的追随者(基本需求的Velocity 、原始JSP、Struts 等)。不过,我自己通常更喜欢面向组件的框架。

最后,我建议您只看一下 Tapestry、Wicket 和 JSF,然后选择最适合您的。您可能会很快找到适合您喜欢的工作方式的一种。

于 2008-08-23T23:39:36.317 回答
39

我最喜欢的是 Spring 框架。使用 2.5 Spring MVC 真是太棒了,带有新的注释、约定优于配置特性等。

如果您只是在做一些超级简单的事情,您也可以尝试使用常规的 Servlet API,而不必为框架而烦恼。

于 2008-08-23T21:55:11.213 回答
25

我推荐面向组件的Wicket框架。它允许您用普通的旧 Java 代码编写您的 Web 应用程序,您可以使用 POJO 作为所有组件的模型,而无需处理巨大的 XML 配置文件。

当我发现 Wicket 并看到 Web 应用程序开发是多么容易时,我已经使用 Struts 成功开发了一个在线银行应用程序!

于 2008-08-25T21:16:28.047 回答
17

我最近开始使用Stripes Framework。如果您正在寻找一个基于请求的框架,该框架非常易于使用,但不会对您正在做的事情施加任何限制,我强烈推荐它。

它类似于 struts,但远远超出了它。甚至有一些插件项目可以让您使用很少的配置就可以使用 hibernate 或 jpa。

虽然我听说 wicket 也是一个很好的框架,但那里有很多很好的框架,但我没有使用它。

于 2008-08-25T14:04:20.440 回答
16

自己没试过,但我觉得

http://www.playframework.org/

有很大的潜力...

来自 php 和经典的 asp,它是第一个听起来对我很有希望的 java web 框架....

于 2009-10-25T19:08:36.843 回答
11

更新:Tapestry 5.2 已经发布,所以它并没有像以前看起来那样被放弃。我的经验是 Tapestry 4,而不是 5,所以你的里程可能会有所不同。这些年来,我对 Tapestry 的看法发生了变化。我已经修改了这篇文章以反映它。

我不能再像以前那样推荐 Tapestry。Tapestry 5 似乎是一个重大改进,但我对 Tapestry 的主要问题不在于平台本身;它与它背后的人有关。

从历史上看,Tapestry 的每个主要版本更新都打破了带有极端偏见的向后兼​​容性,远远超出了人们的预期。这似乎是由于采用了新的编码技术或需要大量重写的技术。

Howard Lewis Ship(Tapestry 的主要作者)当然是一位出色的开发人员,但我不能说我关心他对 Tapestry 项目的管理。Tapestry 5 的开发几乎是在 Tapestry 4 发布后立即开始的。据我所知,Ship 非常投入,将 Tapestry 4 留给了其他贡献者,我觉得这些贡献者的能力不如 Ship。在痛苦地从 Tapestry 3 切换到 Tapestry 4 之后,我感觉自己几乎立即被抛弃了。

当然,随着 Tapestry 5 的发布,Tapestry 4 成为了遗留产品。如果升级路径不再那么残酷,我不会有这个问题。所以现在我们的开发团队处于一个相当不值得羡慕的位置:我们可以继续使用一个基本上被废弃的 Web 平台(Tapestry 4),对 Tapestry 5 进行令人发指的升级,或者完全放弃 Tapestry 并使用另一个平台重写我们的应用程序。这些选项都不是很有吸引力。

据说 Tapestry 5 的编写是为了减少从现在开始更新中断的可能性。一个很好的例子是页面类:在以前的版本中,页面类是从 Tapestry 提供的基类继承而来的;此类中不兼容的 API 更改是导致大量向后兼容性问题的原因。在 Tapestry 5 中,页面是 POJO,在运行时通过注释使用“魔法 Tapestry 仙尘”进行了增强。因此,只要维护注释合同,Tapestry 的更改就不会影响您的页面类。

如果这是正确的,那么使用 Tapestry 5 编写一个新的应用程序可能会很好。但就个人而言,我不想再把手放在燃烧器上。

于 2008-09-02T18:20:09.280 回答
9

Disclamer:我在 Vaadin(以前的 IT Mill)工作

如果你正在做一些 RIAish,你可能想看看Vaadin。它是一个开源的面向 UI 的 AJAX 框架,对我来说很好用(我自己来自 PHP 背景)。

有一个案例研究比较了在 Icefaces 和 Vaadin 中执行相同的应用程序(即具有相同功能集的两个应用程序)。简而言之,它表明 UI 开发速度要快得多。

尽管这项研究是在公司的 wiki 上进行的,但我可以保证它是客观、真实和真实的,尽管我不能强迫你相信我。

于 2008-08-23T21:19:52.470 回答
7

经过长时间测试各种解决方案后,对我来说结果是:

  • 表示层和控制器层的 Spring MVC(虽然没有 Spring Webflow,因为我的流程基于 ajax)

  • jQuery 用于所有客户端的东西

  • Spring Security 用于安全方面

  • 休眠/JPA2

  • Jetty为了延续(彗星)

一个月的学习曲线异常陡峭,但现在我很开心。

我还想提一下,我距离跳过所有 Java 内容并转而学习 Scala/LIFT 仅一步之遥。就我而言,Java 中与尖端 Web 开发相关的所有内容(彗星、异步通信、安全性(是的,即使使用 Spring Security!))仍然有点像 hack(用证据证明我错了,请!)。对我来说,Scala/LIFT 似乎是一种更加开箱即用的一体化解决方案。

我最终决定使用 Scala 的原因是

  • 作为项目负责人,我必须考虑人力资源,Java 开发人员比 Scala 开发人员更容易找到

  • 对于我团队中的大多数开发人员来说,Scala 的函数式概念虽然非常出色,但很难理解

干杯尔

于 2010-08-03T07:21:40.180 回答
5

我也听说过有关 Spring 框架的好消息。不过,总的来说,我对我看过的大多数 Java Web 框架(尤其是 Struts)都不甚满意。

对于一个简单的应用程序,我肯定会考虑使用“原始”servlet 和 JSP,而不用担心采用框架。如果 servlet 编写得很好,那么当应用程序变得越来越复杂时,如果有必要,可以直接将其移植到框架中。

于 2008-08-23T23:10:20.393 回答
5

我的选择是检票口!!

于 2009-02-24T09:44:20.463 回答
4

所有这些 - 这就是问题;-)

于 2008-09-26T11:36:22.563 回答
3

我认为对于您的适度要求,您只需要编写可以从 Tomcat 服务器提供的 servlet 或简单的 jsp 页面。我认为您不需要任何类型的网络框架(如 struts)来存储个人网站数据

于 2008-08-23T21:40:54.917 回答
3

说“使用 JSF”有点简单。当您决定使用 JSF 时,您必须在其之上选择一个组件库。你会使用 MyFaces Tomahawk, Trinidad, Tobago ( http://myfaces.apache.org/ ) 吗?或者也许是 ICEfaces ( http://www.icefaces.org/ )?哦,如果您使用 ICEfaces,您会使用 JSP 还是 Facelets 来创建视图?

在我看来,这很难说。至少在我从事的项目中,没有人有时间评估所有有希望的替代方案,因为它们的规模不足以进行三个月的评估阶段。但是,您应该四处寻找一些拥有庞大而活跃的社区并且一年内没有消失的人。JSF 已经存在了一段时间,并且由于它受到太阳的推动,它还会存在一段时间。我不能说这是否是最好的选择,但它会是一个不错的选择。

于 2009-02-24T10:23:50.960 回答
3

http://zkoss.org - 好一个

于 2009-09-09T13:38:09.457 回答
3

对于高流量站点,我会使用一个不在服务器上管理客户端状态的框架——Wicket、JSF 和 Tapestry 正在管理服务器上的客户端状态。如果应用程序更像桌面应用程序,我只会使用这些框架(Wicket 是我的最爱)。但我会尝试使用更具可扩展性和简单的 REST+AJAX 方法。

Spring MVC 将是一个候选者,但是从 Spring MVC 3 开始,它有一个奇怪的注解重载编程模型,它没有使用静态类型的好处。还有其他丑陋的东西,例如方法中的输出参数与通常的返回相结合,因此一个方法有两个输出通道。Spring MVC 也倾向于重新发明轮子,与其他框架相比,您将需要配置更多。我不能真正推荐 Spring MVC,尽管它有一些不错的想法。

Grails 是使用 Spring MVC 和其他已建立的框架(如 Hibernate)的便捷方式。编码很有趣,你很快就会看到结果。

并且不要忘记带有一些像 FreeMarker 这样用于模板的小助手的 Servlet API 非常强大。

于 2009-12-30T10:08:21.637 回答
3

我已经评估了很多框架,并且 Vaadin ( http://vaadin.com/home ) 一直渗透到顶部。

你至少应该给它一个简短的评估。

干杯!

于 2010-07-27T16:17:58.363 回答
2

我的选择是 Wicket(用于大型项目和可预测的用户群)、GWT(用于主要面向公众的大型项目)或只是一个服务框架(如 Jersey/JAXRS)和一个 JavaScript 工具包(用于中小型项目) .

于 2010-01-31T23:30:31.557 回答
2

我推荐 Seam,特别是如果您需要持久性。

于 2010-03-06T17:48:23.047 回答
1

请参阅一些关于一些 Java 应用程序框架的评论(第二段):

http://swiss-knife.blogspot.com/2009/11/some-java-application-servers.html

于 2010-08-02T17:48:14.983 回答
1

对于快速和花哨的 GUI,您可以将 JSF 与Richfaces库一起使用。Richfaces UI 组件易于使用,并且在演示站点中的代码演示中提供了方便的参考。可能稍后当您的站点需要处理更多数据并且必须在数据库中处理大量信息时,您可以使用它插入任何数据库访问框架(ORM)。

于 2011-04-15T13:02:21.187 回答
0

不敢相信没有人提到 GWT

于 2008-09-11T04:43:14.733 回答
0

对于真正简单的应用程序,我最喜欢的方法是 Apache VelocityTools (VelocityLayoutServlet) 和 Velosurf ( http://velosurf.sourceforge.net )。

对于更复杂的应用程序,Spring MVC 或 Struts 2。

于 2008-09-15T16:03:02.680 回答
0

试试 HybridJava——它比其他任何东西都简单。

于 2010-07-28T05:32:44.937 回答
0

我会说vaadinwicket

于 2011-02-08T11:08:06.617 回答