各种Java Web框架的优缺点是什么?

时间:2008-08-23 20:58:25

标签: java web-frameworks rich-internet-application

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

我的网站本来就是为了我自己开始构建它的乐趣,但如果它变得流行,那么它具有一定的可扩展性,或者至少能够重新设计它是一件好事。 / p>

更受欢迎的框架之间的主要区别是什么?有没有一个显着优于其他人的情况?例如,高流量企业应用程序与低流量小型应用程序。我也想知道有些人比其他人更容易学习和使用。

是否有人对某些框架有经验并可以提出建议?大量选择是否只是作为早期警告,以尽可能避免基于Java的Web开发?

24 个答案:

答案 0 :(得分:58)

我已经相当广泛地使用了Tapestry 3WicketEchoJSF。我真的建议你仔细看看那些看起来最适合你的那个,并且最接近你喜欢的工作方式。

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

如果您不介意用Java编写所有布局,那么

Echo会很棒。我知道现在有所不同,但我仍然认为该产品服务范围相当狭窄。他们似乎也改变了每个主要版本的开发模型。

Tapestry是一个伟大的产品,但在发展模式方面显然与其他产品有很大不同,因为它主要由一个人带领。 Howard Lewis Ship无疑很聪明,但我对他们决定基本忘记每个版本的向后兼容性感到失望。但是,根据您的需要,这可能并不重要,而且我总是发现Tapestry产品令人愉快。

JSF已经存在多年了,仍然感觉像Struts家伙为修复Struts的所有问题而构建的东西。没有真正理解Struts的所有问题。它仍然有一种未完成的感觉,虽然该产品显然非常灵活。我使用它并对它有一些喜爱,对它的未来寄予厚望。我认为在JEE6中提供的下一个版本(2.0)将真正将它带入自己的版本,使用新的模板语法(类似于Facelets)和简化的组件模型(最终只有1个文件中的自定义组件)。 / p>

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

最后,我建议您只看看Tapestry,Wicket和JSF,然后选择最适合您的那个。您可能会找到一个符合您喜欢的工作方式的工具。

答案 1 :(得分:38)

我最喜欢的是Spring Framework。 2.5 Spring Spring MVC是soooo kick ass,带有新的注释,约定优于配置功能等。

如果你只是做一些非常简单的事情,你也可以尝试使用常规的Servlet API,而不是打扰框架。

答案 2 :(得分:25)

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

当我发现Wicket时,我已经成功开发了一个使用Struts的在线银行应用程序,并看到了Web应用程序开发的简单性!

答案 3 :(得分:17)

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

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

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

答案 4 :(得分:16)

我自己没试过,但我想

http://www.playframework.org/

有很多潜力...

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

答案 5 :(得分:11)

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

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

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

霍华德刘易斯船(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编写新的应用程序可能会很好。但就个人而言,我不想再把手放在燃烧器上了。

答案 6 :(得分:9)

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

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

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

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

答案 7 :(得分:7)

经过一段时间的测试各种解决方案,对我来说原来是:

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

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

  • Spring安全方面的安全性

  • Hibernate / JPA2

  • Jetty为了延续(彗星)

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

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

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

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

  • 对于我团队中的大多数开发人员来说,Scala的功能概念虽然很好,但很难理解

干杯 呃

答案 8 :(得分:5)

我也听说过有关Spring Framework的好消息。但总的来说,我看过的大多数Java Web框架(esp Struts)都让我感到不知所措。

对于一个简单的应用程序,我肯定会考虑使用“原始”servlet和JSP,而不用担心采用框架。如果servlet写得很好,将来如果需要增加复杂性,移植到框架应该很简单。

答案 9 :(得分:5)

我的选择是Wicket !!

答案 10 :(得分:4)

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

答案 11 :(得分:3)

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

答案 12 :(得分:3)

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

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

干杯!

答案 13 :(得分:3)

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

Spring MVC将是候选者,但是自从Spring MVC 3以来,它有一个奇怪的注释重载编程模型,它没有使用静态类型的好处。还有其他丑陋的东西,比如方法中的输出参数和通常的返回,所以一种方法有两个输出通道。 Spring MVC也倾向于重新发明轮子,与其他框架相比,你将拥有更多的配置。我不能真正推荐Spring MVC虽然它有一些不错的想法。

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

不要忘记,带有一些像FreeMarker这样的小帮手进行模板化的Servlet API非常强大。

答案 14 :(得分:3)

http://zkoss.org - 好的

答案 15 :(得分:3)

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

在我看来很难说。没有人有时间评估所有有前景的替代方案,至少在我工作的项目中,因为它们不足以进行三个月的评估阶段。但是,您应该环顾一下那些拥有庞大而活跃的社区并且一年内不会消失的人。 JSF已经存在了一段时间,并且由于它被太阳推动,它将会更多。我不能说它是否是最好的选择,但它会是一个很好的选择。

答案 16 :(得分:2)

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

答案 17 :(得分:2)

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

答案 18 :(得分:1)

在一些Java应用程序框架上看到一些评论(第二段):

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

答案 19 :(得分:1)

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

答案 20 :(得分:0)

我最喜欢的方法是使用Velosurf(http://velosurf.sourceforge.net)的Apache VelocityTools(VelocityLayoutServlet)。

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

答案 21 :(得分:0)

尝试HybridJava - 这比其他任何东西都简单。

答案 22 :(得分:0)

不敢相信没有人提到过GWT

答案 23 :(得分:0)

我会说vaadinwicket