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

时间:2020-03-05 18:42:28  来源:igfitidea点击:

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

我的网站只是出于我自己的兴趣,一开始便会对其进行构建,但是,如果它变得流行,那么它具有一定的可伸缩性,或者至少能够为此进行重新设计,将是有益的。

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

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

解决方案

回答

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

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

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

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

回答

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

回答

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

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

回答

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

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

回答

我已经相当广泛地使用了Tapestry 3,Wicket,Echo和JSF。我真的建议我们仔细研究一下,选择最适合方式,并且最适合工作方式。

由于组件构建的轻量级特性和页面模板的简单性,其中最让我感到满意的是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,然后挑选最适合一种。我们可能会发现一个非常适合我们想要快速工作的方式。

回答

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

它与struts类似,但远远超出了它。甚至有一些插件项目,使我们只需很少的配置就可以使用hibernate或者jpa。

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

回答

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

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

回答

更新: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编写新的应用程序可能会顺利进行。但就我个人而言,我不想再把手放在燃烧器上。

回答

不敢相信没有人提到GWT

回答

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

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

回答

所有这些都是问题;-)

回答

我的选择是小票!

回答

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

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

回答

http://zkoss.org的好人

回答

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

http://www.playframework.org/

有很大的潜力...

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

回答

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

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

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

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

回答

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

回答

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

回答

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

我们至少应该对其进行简短评估。

干杯!

回答

试试HybridJava,它比其他任何东西都简单得多。

回答

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

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

回答

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

  • 用于表示层和控制器层的Spring MVC(但是没有Spring Webflow,因为我的流程基于ajax)
  • jQuery的所有客户端内容
  • Spring Security从安全方面来讲
  • 休眠/ JPA2
  • 为了延续的码头(彗星)

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

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

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

  • 作为项目负责人,我必须考虑人力资源,并且Java开发人员比Scala开发人员更容易找到
  • 对于我们团队中的大多数开发人员而言,Scala的功能概念虽然非常出色,却难以理解

干杯