什么是各种Java Web框架的优点和缺点?
我正在考虑使用Java创build自己的网站,并试图决定使用什么框架。 但是,快速searchJava框架返回50多个可供select!
我的网站一开始就是为了自己的兴趣而build立起来的,但是如果它变得stream行的话,它有一定的可扩展性,或者至less可以重新devise。
更stream行的框架之间的主要区别是什么? 是否有一个显着胜过其他的情况? 例如,高stream量的企业应用程序与低stream量的小应用程序。 我也想知道是否有人比其他人更容易学习和使用。
有没有人有这些框架的经验,并可以提出build议? 纯粹的select数量是否只是作为一种早期预警,尽可能避免基于Java的Web开发?
我已经相当广泛地使用了Tapestry 3 , Wicket , Echo和JSF 。 我真的build议你看看那些对你来说最简单,最适合你工作的方式。
其中,与我合作的最舒服的是Wicket ,由于构件的轻量化和页面模板的简单性。 如果你正在使用自己的数据库代码而不是Hibernate或其他框架(我从来没有完全满意于Wicket Hibernate或Spring Integration),那么这会倍增。
回声是伟大的,如果你不介意用Java编写所有的布局。 我知道现在是不同的,但我仍然认为产品的利基相当狭窄。 他们似乎也改变了每个主要版本的发展模式。
挂毯是一个很棒的产品,但是它在发展模式上明显与其他产品有很大不同,因为它主要由一个家伙领导。 Howard Lewis Ship无疑是相当聪明的,但是我对他们基本忘记每个版本的向后兼容性的决定感到失望。 不过,再次,为了您的需要,这可能无关紧要,而且我总是发现Tapestry产品很好用。
JSF已经出现多年了,而且仍然感觉Struts是为解决Struts的所有问题而构build的。 没有真正理解Struts的所有问题。 它仍然有一个未完成的感觉,虽然产品显然非常灵活。 我使用它,对它有一些喜爱,对它的未来寄予厚望。 我认为在JEE6中发布的下一个发行版本(2.0)将真正实现它自己的新模板语法(类似于Facelets)和简化的组件模型(最终只有一个文件中的自定义组件)。
当然,还有一百万个较小的框架和工具可以获得他们自己的以下(基本需求Velocity ,原始JSP ,Struts等)。 不过,我通常更喜欢面向组件的框架。
最后,我build议你只要看一下Tapestry,Wicket和JSF,然后select一个感觉最适合你的人。 你可能会发现一个适合你喜欢的工作方式很快。
我最喜欢的是Spring框架。 2.5 Spring MVC是一个很好的开始,新的注释,约定和configuration特性等等。
如果你只是做一些超级简单的事情,你也可以尝试使用常规的Servlet API,而不用打扰框架。
我推荐面向组件的Wicket框架。 它允许您使用普通的旧Java代码编写您的Web应用程序,您可以使用POJO作为所有组件的模型,而不需要大量的XMLconfiguration文件。
当我发现Wicket时,我已经成功开发了一个使用Struts的在线银行应用程序,并且看到了Web应用程序开发的简单性!
我最近开始使用Stripes框架 。 如果你正在寻找一个真正容易使用的基于请求的框架,但是对你正在做的事情没有任何限制,我会强烈推荐它。
它与struts类似,但是它超越了它。 甚至还有一些插件项目可以让你用很less的configuration来使用hibernate或jpa。
虽然我听说Wicket也是一个很好的框架,但是我还没有使用它。
另一个要考虑的是Grails。
虽然它不是严格意义上的Java框架,但它依赖于Groovy(如果您以前没有看到过,这是在JVM上运行的dynamic语言)。 大多数有效的Java也是有效的Groovy,所以它很容易学习。
我最后一个项目使用了Grails,而我以前从未使用过Groovy,于是我发现:
- Groovy是一个喜欢使用,比Java更有趣的
- 几乎没有什么configuration可以做,没有XML,只需不到一个小时就可以运行一个完整的数据库应用程序
有一个缺点:这是一个非常“聪明”的框架,从你隐藏很多,所以当出现问题时,发现问题可能非常耗时。
我提到的这个项目根本就没有按时或按照预算发货,如果我们想要一个更传统的框架(即使我们熟悉SpringMVC这样的框架),所以Grails绝对是我们将继续的挑选未来。
(但Wicket和Stripes +1,两个优秀的框架)。
更新:Tapestry 5.2已经出来,所以它没有被放弃,因为它以前似乎是。 我的经验是挂毯4,而不是5,所以你的里程可能会有所不同。 我对挂毯的看法多年来一直在变化, 我已经修改这个post来反映它。
我不能像以前那样推荐Tapestry。 挂毯5似乎是一个重大的改进,但我的主要问题与挂毯不是平台本身; 它背后的人。
从历史上看,Tapestry的每个主要版本更新已经打破了与极端偏见的兼容性,远远超过人们所期望的。 这似乎是由于需要大量重写的新编码技术或技术的结合。
Howard Lewis Ship(Tapestry的主要作者)当然是一位出色的开发人员,但我不能说我关心他对Tapestry项目的pipe理。 Tapestry 4在发货后几乎立即开始发展。 从我所能告诉的是,船舶几乎全身心投入,把“挂毯4”交给了其他的贡献者,我觉得他们的能力不如船舶。 从“挂毯3”到“挂毯4”做了痛苦的转变之后,我觉得我几乎立刻被抛弃了。
当然,随着Tapestry 5的发布,Tapestry 4成为传统产品。 如果升级路线不再那么残酷,我也不会有任何问题。 所以现在我们的开发团队处于一个相当尴尬的境地:我们可以继续使用一个本质上被遗弃的web平台(Tapestry 4),对Tapestry 5进行可恶的升级,或者完全放弃Tapestry,并用另一个平台重写我们的应用程序。 这些选项都不是很有吸引力。
据说Tapestry 5是为了减less从这一点开始更新破坏的可能性。 一个很好的例子就是页面类:在以前的版本中,页面类是由Tapestry提供的基类inheritance而来的; 此类中不兼容的API更改是大量向后兼容性问题的原因。 在Tapestry 5中,页面是POJO,在运行时通过注释增强了“魔术Tapestry仙尘”。 所以只要维护注释的合同,对Tapestry的更改不会影响您的页面类。
如果这是正确的,那么使用Tapestry 5写一个新的应用程序可能会很好。 但个人而言,我不想再把手放在燃烧器上。
Disclamer:我在Vaadin(以前的IT Mill)工作,
如果你正在做一些RIAish,你可能想看看Vaadin 。 这是一个开源的面向用户界面的AJAX框架,对我来说,使用起来很好(我自己来自PHP背景)。
有一个案例研究比较了在Icefaces和Vaadin中做相同的应用程序(即具有相同function的两个应用程序)。 简而言之,它表示UI开发速度相当快。
即使这项研究是在公司的wiki上进行的,但我可以保证这是客观的,真实的和诚实的,尽pipe我不能强迫你相信我。
经过很长时间的testing各种解决scheme,对我来说,原来是:
-
用于演示文稿和控制器层的Spring MVC(虽然没有Spring Webflow,因为我的stream程基于ajax)
-
jQuery的所有客户端的东西
-
Spring Security,安全性方面
-
hibernate/ JPA2
-
docker为了延续(彗星)
一个月的学习曲线非常陡峭,但现在我很开心。
我还想提一下,我只是略过了所有的Java的东西,而不是Scala / LIFT。 就我而言,Java中与尖端Web开发(彗星,asynchronous通信, 安全性 (是的,即使是在Spring Security!)相关的一切)仍然是一个黑客(通过证据certificate我错了,pleeease !)。 对我来说,Scala / LIFT似乎是一个更加开箱即用的全function解决scheme。
我之所以最终决定不去与斯卡拉是
-
作为项目负责人,我必须考虑人力资源,Java开发人员比Scala开发人员更容易find
-
对于我的团队中的大多数开发人员来说,斯卡拉的function性概念尽pipe很好,但是很难理解
干杯
我的select是Wicket!
我也听说过Spring框架的好处。 不过,总的来说,我已经看到了大多数我看过的Java Web框架(特别是Struts)。
对于一个简单的应用程序,我肯定会考虑使用“原始”servlet和JSP,而不用担心采用框架。 如果servlet写得很好,那么在应用程序变得复杂的情况下,如果有必要的话,将来可以直接使用这个框架。
所有这些 – 这就是问题;-)
我认为,对于您的适度要求,您只需编写servlet或简单的jsp页面,您可以从Tomcat服务器提供服务。 我不认为你需要任何types的网站框架(如struts)个人网站的数据
说“使用JSF”有点简单。 当您决定使用JSF时,您必须在其上select一个组件库。 你会使用MyFaces Tomahawk,Trinidad,Tobago( http://myfaces.apache.org/ )吗? 或者也许ICEfaces( http://www.icefaces.org/ )? 哦,如果你使用ICEfaces,你会使用JSP或Facelets来获取你的视图吗?
在我看来很难说。 没有人有时间评估所有有希望的替代scheme,至less在我正在进行的项目中,因为它们不够大,无法进行三个月的评估阶段。 但是,你应该环顾一些拥有大而活跃的社区,而且一年不会离开。 JSF已经有一段时间了,由于被太阳推动,它将会有更多。 我不能说这是不是最好的select,但它会是一个好的select。
http://zkoss.org – 好的
对于高stream量的网站,我会使用一个不pipe理服务器上的客户端状态的框架 – Wicket,JSF和Tapestry正在pipe理服务器上的客户端状态。 我只使用这些框架(Wicket是我最喜欢的),如果应用程序应该更像是一个桌面应用程序。 但是,我会尝试使用更具扩展性和简单的REST + AJAX方法。
Spring MVC将是一个候选人,但是由于Spring MVC 3有一个奇怪的注释重载编程模型,它不使用静态types的好处。 还有其他一些丑陋的东西,如方法中的输出参数和一个普通的返回值,所以一个方法有两个输出通道。 Spring MVC也倾向于重新开始,与其他框架相比,你将有更多的configuration。 虽然它有一些不错的想法,我不能真正推荐Spring MVC。
Grails是使用Spring MVC和Hibernate等其他已有框架的一种便捷方式。 编码很有趣,你会很快看到结果。
不要忘了Servlet API和一些像FreeMarker这样的模板帮助器非常强大。
我select的是Wicket(对于大型项目和可预测的用户群),GWT(对于大多数公众所面临的大型项目),或者只是一个服务框架(如Jersey / JAXRS)和JavaScript工具包(用于中小型项目) 。
我推荐Seam,特别是如果你需要持久性。
查看一些Java应用程序框架(第二段)的评论:
http://swiss-knife.blogspot.com/2009/11/some-java-application-servers.html
对于快速和花哨的 GUI,您可以使用带有Richfaces库的JSF。 Richfaces UI组件易于使用,演示站点中的代码演示提供了方便的参考。 很可能以后,当你的站点有更多的数据需要处理,大量的信息必须在数据库中进行处理时,你可以使用任何数据库访问框架(ORM)。
不能相信没有人提到GWT
我最喜欢的方法是使用Velosurf( http://velosurf.sourceforge.net )的Apache VelocityTools(VelocityLayoutServlet)。
对于更复杂的应用程序,Spring MVC或Struts 2。
试试HybridJava–比其他任何东西都简单得多。
我会说vaadin或wicket