各种Java Web框架的优缺点是什么?[关闭]


85

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

我的网站只是为了让我自己一开始就喜欢构建它,但是如果它流行起来,那么它具有一定的可伸缩性,或者至少能够为此进行重新设计,将是一件好事。

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

是否有人对某些框架有经验并可以提出建议?众多选择是否只是在可能的情况下避免基于Java的Web开发的预警?


在某种程度上,这就像说“快速搜索工具会返回50多种可供选择;我应该选择锤子,螺丝刀还是钳子?” 不过,对于子问题,这是一个体面的“良好主观”问题。
流行

像往常一样“有趣”,非常有用的问题和答案(我刚刚订购了有关Wicket的书,谢谢大家),但是由于没有建设性,所以整个文章都关闭了。“这个问题很可能会解决” –这个干燥的事实,没有任何投机性,哦,讽刺……
greenoldman 2012年

Answers:


59

我已经相当广泛地使用了Tapestry 3WicketEchoJSF。我真的建议您仔细检查一下,选择最适合您的方式,并且最适合您的工作方式。

其中,由于组件构建的轻量级特性和页面模板的简单性,最适合我使用的是Wicket。如果您使用的是自己的数据库代码而不是Hibernate或其他框架(我对Wicket Hibernate或Spring Integration从未完全满意),那将是双重的。

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

Tapestry是一个很棒的产品,但是就开发模型而言,Tapestry显然与其他产品大不相同,因为它主要由一个家伙领导。霍华德·刘易斯·希普(Howard Lewis Ship)无疑很聪明,但是我对他们放弃与每个发行版的向后兼容性的决定感到失望。再次强调一下,对于您的需求而言,这可能并不重要,而且我一直觉得Tapestry产品很适合与之抗衡。

JSF已经问世了多年,但仍然感觉像是Struts家伙为解决Struts的所有问题而构建的东西。没有真正了解Struts的所有问题。尽管产品显然非常灵活,但它仍未完成。我使用它并对此有一些爱好,并对它的未来充满希望。我认为将在JEE6中发布的下一个版本(2.0)确实会将其引入新的模板语法(类似于Facelets)和简化的组件模型(最终仅在1个文件中定制组件)。

而且,当然,有数百万个较小的框架和工具可以效仿(基本需求的速度,原始JSP,Struts等)。不过,我通常更喜欢面向组件的框架。

最后,我建议您先看看Tapestry,Wicket和JSF,然后挑选最适合您的一种。您可能会找到一种适合您想要快速工作的方式。


如果您的Web应用程序是基于内容的,例如论坛系统,则建议您使用GWT和Ext-js。如果您的Web应用更像ERP终端之类的桌面应用,我建议您使用ZK,Echo3,Vaddin和GWT。我不会建议任何JSF解决方案,因为如果没有“这是JEE标准”的事实,我发现使用它们没有任何好处。
Zanyking

1
@Zanyking-如果您的论坛需要SEO,您会发现GWT很难,imo。
jsight

3
JSF可能对一个网站来说过于矫kill过正,相反,我会去寻求更具生产力的框架,...开发应该保持乐趣,并且JSF的构建并没有考虑到“乐趣” :)
HeDinges

1
Tapestry,Wicket,JSF和Echo都是面向组件的,而GWT,Ext-js和Vaadin都是基于Java的。不要忘了看一下所有很棒的“经典” MVC框架,例如Spring MVC,Play框架,Grails和Stripes。它们的编程模型与以前的模型完全不同,但是还有其他优点(这就是为什么有这么多框架-不同的目的,需求和品味需要不同的工具)的原因。
DaGGeRRz

39

我最喜欢的是Spring Framework。使用2.5 Spring MVC是一个不错的选择,它具有新的注释,约定优于配置功能等。

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


1
对于使用常规Servlet API进行简单的提及,请投票赞成。
lsiu

1
出于Wicket In Action第一章(免费)的概述,我会避免使用任何“ web mvc”框架。另外,除非您只有一个页面应用程序,或者您希望从头开始编写自己的框架,否则我将避免直接使用Servlet API。
Eelco 2010年

3
我也喜欢Spring,但是我发现,只有在编写恶意应用程序时,所有配置才有回报。
伦纳德·埃伦弗里德

1
几乎没有任何使用注释的配置。
bpapa 2010年

1
@bpapa批注仅将配置放在Java类中,而不是xml中。
史蒂文

25

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

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


17

我最近开始使用Stripes Framework。如果您正在寻找一个真正易于使用的基于请求的框架,但是对您的工作没有任何限制,我强烈建议您使用它。

它与struts类似,但远远超出了它。甚至还有一些插件项目,使您只需很少的配置即可使用休眠或jpa。

尽管我听说wicket也是一个很好的框架,但是这里有很多很好的框架,但是我没有使用过。


16

我自己还没有尝试过,但我认为

http://www.playframework.org/

有很大的潜力...

来自PHP和经典的ASP,它是第一个对我来说很有前途的Java Web框架。


2
有趣的是,今天第五次在stackoverflow上看到“我没有使用过,但我推荐玩”。
Marko 2012年

11

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

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

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

Howard Lewis Ship(Tapestry的主要作者)当然是一位出色的开发人员,但我不能说我很在意他对Tapestry项目的管理。Tapestry 4交付后,Tapestry 5的开发几乎立即开始。据我所知,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编写新的应用程序可能会很好。但就我个人而言,我不想再把手放在燃烧器上。


更新:随着时间的流逝,Tapestry项目似乎已被放弃。自2009年4月以来,Tapestry 5尚未发布任何版本,而Tapestry 4的JIRA中仍然存在大量未解决的错误,自08年以来就没有更新。因此,我不再推荐Tapestry作为Web应用程序框架的可行选择。
罗伯特·J·沃克

挂毯尚未被遗弃。Tapestry 5分支相当活跃,其中5.1作为稳定选项,而5.2即将推出。
蒂莫·韦斯特坎珀

你是对的。实际上,Tapestry 5.2已发布。我已经更新了帖子,以反映我对Tapestry的更新意见。
罗伯特·J·沃克

9

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

如果您正在做一些RIAish,您可能想看看Vaadin。对我来说,这是一个面向UI的开源框架,使用起来很好(我本人来自PHP背景)。

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

尽管该研究报告是在公司的Wiki上进行的,但我可以保证它是客观,真实和真实的,尽管我不能强迫您相信我。


+1该框架已更名为vaadin(以前是ITMill)。我不得不说vaadin是一个非常漂亮的Web框架,所有Java都不例外。我觉得这很有成效。
fmucar 2011年

7

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

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

  • jQuery的所有客户端内容

  • Spring Security从安全方面来讲

  • 休眠/ JPA2

  • 为了延续的码头(彗星)

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

我还要提及的是,我距跳过Java的所有内容仅几步之遥,而转而使用Scala / LIFT。就我而言,Java中与尖端Web开发相关的所有内容(彗星,异步通信,安全性(是的,甚至使用Spring Security!))仍然有些骇人听闻(以证据证明我是错的,请讨好) !)。对我来说,Scala / LIFT似乎是一种更加开箱即用的多合一解决方案。

我最终决定加入Scala的原因是

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

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

干杯


这都是好东西。弹簧MVC的不错选择,请保持安全(明智)。
Victor Ionescu

5

我也听说过有关Spring Framework的好消息。总的来说,尽管如此,我所见过的大多数Java Web框架(尤其是Struts)都不知所措。

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


1
为“如果servlet写得好...而+1”
克里斯(Chris)2009年


4

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


3

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


3

说“使用JSF”有点简单。当您决定使用JSF时,必须在它之上选择一个组件库。您将使用MyFaces Tomahawk(特立尼达和多巴哥)(http://myfaces.apache.org/)吗?还是ICEfaces(http://www.icefaces.org/)?哦,如果您使用ICEfaces,是否将JSP或Facelets用于视图?

我认为这很难说。至少在我从事的项目中,没有人有时间评估所有有前途的替代方案,因为它们规模不足以进行三个月的评估阶段。但是,您应该环顾四周,这些社区拥有庞大而活跃的社区,并且一年都没有消失。JSF已经存在了一段时间,并且由于受到阳光的推动,它还会存在更多。我不能说这是否是最佳选择,但这将是一个不错的选择。


在开发我们出售的Web应用程序时,Jsp对我来说很痛苦。更新将考虑使用facelets。
托尔比约恩Ravn的安徒生

是的,到现在为止我很确定:使用facelets而不是JSP。它要好得多,我看不到任何(大)缺点。
TimBüthe2010年


3

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

可以使用Spring MVC,但是自Spring MVC 3起,它具有一个奇怪的注释重载编程模型,该模型没有利用静态类型的好处。还有其他丑陋的事情,例如方法中的输出参数和通常的返回值,因此一个方法有两个输出通道。Spring MVC还倾向于重新发明轮子,与其他框架相比,您将需要进行更多配置。我真的不能推荐Spring MVC,尽管它有一些不错的主意。

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

并且不要忘记,带有一些小帮手(例如FreeMarker)的Servlet API非常强大。



2

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


2

我建议使用Seam,尤其是在需要持久性的情况下。



1

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


0

不敢相信没有人提到GWT


我不会真正将GWT真正视为一个Web应用程序框架(它更像一个Web工具包,因此得名)。但是GWT很棒,例如,与Spring一起运行得很好。
stian

框架或工具箱,具体的区别到底是什么?使用GWT进行编码与使用其他选项一样,使用框架也是如此。
Eelco 2010年



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.