
What are the pros and cons of the assorted Java web frameworks?我正在考虑使用Java创建自己的网站,并试图确定要使用的框架。 但是,快速搜索Java框架会返回50多种选择! 我的网站只是出于我自己的兴趣,一开始便会对其进行构建,但是,如果它变得流行,那么它具有一定的可伸缩性,或者至少能够为此进行重新设计,将是一件好事。 较流行的框架之间的主要区别是什么? 在某些情况下,有一个明显优于其他情况吗? 例如,高流量的企业应用程序与低流量的小型应用程序。 我也想知道是否有些东西比其他东西更容易学习和使用。 是否有人对某些框架有经验并可以提出建议? 众多选择是否只是在可能的情况下避免基于Java的Web开发的预警? 我已经相当广泛地使用了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,并选择最适合您的那种。您可能会找到一种适合您想要快速工作的方式。 我最喜欢的是Spring Framework。使用2.5 Spring MVC是一个不错的选择,它具有新的注释,约定优于配置功能等。 如果您只是做一些超级简单的事情,也可以尝试使用常规的Servlet API,而不必担心框架。 我推荐面向组件的Wicket框架。它使您可以用普通的旧Java代码编写Web应用程序,可以将POJO用作所有组件的模型,而无需处理庞大的XML配置文件。 当我发现Wicket时,我已经用Struts成功开发了一个在线银行应用程序,并且看到了Web应用程序开发有多容易! 我最近开始使用Stripes Framework。如果您正在寻找一个真正易于使用的基于请求的框架,但是对您的工作没有任何限制,我强烈建议您使用它。 它与struts类似,但远远超出了它。甚至有一些插件项目,使您只需很少的配置即可使用休眠或jpa。 尽管我听说wicket也是一个很好的框架,但是这里有很多很好的框架,但是我没有使用过。 我自己还没有尝试过,但我认为 http://www.playframework.org/ 具有很大的潜力... 来自PHP和经典ASP,它是第一个对我来说很有前途的Java 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编写一个新的应用程序可能会很好。但就我个人而言,我不想再把手放在燃烧器上。 Disclamer:我在Vaadin(以前是IT Mill)工作 如果您正在做RIAish,您可能想看看Vaadin。对我来说,这是一个面向UI的开源框架,使用起来很好(我本人来自PHP背景)。 有一个案例研究比较了在Icefaces和Vaadin中执行相同的应用程序(即具有相同功能集的两个应用程序)。简而言之,它指出UI的开发要快得多。 尽管该研究报告是在公司的Wiki上进行的,但我可以保证它是客观,真实和真实的,尽管我不能强迫您相信我。 经过长时间测试各种解决方案后,对我而言,结果是:
一个月的学习曲线异常陡峭,但现在我很高兴。 我还想提到,我距离跳过所有Java内容并转而使用Scala / LIFT仅几步之遥。就我而言,Java中与尖端Web开发有关的所有内容(彗星,异步通信,安全性(是的,甚至使用Spring Security!))仍然有些骇人听闻(以证据证明我是错的) !)。对我而言,Scala / LIFT似乎是一种更加开箱即用的多合一解决方案。 我最终决定不加入Scala的原因是
干杯 我的选择是小票! 我也听说过有关Spring Framework的好消息。总的来说,尽管如此,我所见过的大多数Java Web框架(特别是Struts)都不知所措。 对于一个简单的应用程序,我绝对会考虑使用"原始" servlet和JSP,而不必担心采用框架。如果Servlet编写良好,那么将来在应用程序变得越来越复杂时,如有必要,可以直接移植到框架。 所有这些-这就是问题;-) http://zkoss.org-好人 对于高流量站点,我将使用不管理服务器上客户端状态的框架-Wicket,JSF和Tapestry正在管理服务器上的客户端状态。如果应用程序应该更像桌面应用程序,我只会使用那些框架(Wicket是我的最爱)。但是,我尝试使用更具可伸缩性和更简单的REST + AJAX方法。 可以使用Spring MVC,但是自Spring MVC 3起,它具有一个奇怪的注释重载编程模型,该模型没有利用静态类型的好处。还有其他丑陋的事情,例如方法中的输出参数和通常的返回值结合在一起,因此一个方法有两个输出通道。 Spring MVC还倾向于重新发明轮子,与其他框架相比,您将需要进行更多配置。我真的不能推荐Spring MVC,尽管它有一些不错的主意。 Grails是使用Spring MVC和其他已建立的框架(如Hibernate)的便捷方法。编码很有趣,您会很快看到结果。 并且不要忘记,带有一些小帮手(例如FreeMarker)的Servlet API非常强大。 我已经评估了许多框架,并且Vaadin(http://vaadin.com/home)一直渗透到顶部。 您至少应该对其进行简短评估。 干杯! 我认为,对于您的适度要求,您只需编写可从Tomcat服务器提供服务的servlet或简单的jsp页面即可。我认为您不需要任何类型的Web框架(例如struts)来存储个人网站数据 说"使用JSF"有点简单。当决定使用JSF时,必须在其顶部选择一个组件库。您将使用MyFaces Tomahawk,特立尼达,多巴哥(http://myfaces.apache.org/)吗?还是ICEfaces(http://www.icefaces.org/)?哦,如果您使用ICEfaces,是否将JSP或Facelets用于视图? 我认为这很难说。至少在我从事的项目中,没有人有时间评估所有有前途的替代方案,因为它们规模不足以进行三个月的评估阶段。但是,您应该环顾四周,这些社区拥有庞大而活跃的社区,并且一年都没有消失。 JSF已经存在了一段时间,并且由于受到阳光的推动,它还会存在更多。我不能说这是不是最好的选择,但这将是一个不错的选择。 我选择的是Wicket(用于大型项目和可预测的用户群),GWT(用于主要面向公众的大型项目)或仅是服务框架(如Jersey / JAXRS)以及JavaScript工具包(用于中小型项目) 。 我建议使用Seam,尤其是在需要持久性的情况下。
对于快速而精美的GUI,可以将JSF与Richfaces库一起使用。 请参阅一些Java应用程序框架的评论(第二段): http://swiss-knife.blogspot.com/2009/11/some-java-application-servers.html 对于真正简单的应用程序,我最喜欢的方式是使用带有Velosurf(http://velosurf.sourceforge.net)的Apache VelocityTools(VelocityLayoutServlet)。 对于更复杂的应用程序,请使用Spring MVC或Struts 2。 不敢相信没有人提到GWT 尝试HybridJava-这比其他任何事情都简单得多。 我会说vaadin或wicket |