现在选择Java Web Framework?[关闭]


149

我们正处于将基于自定义开发的mvc框架构建的大型网站迁移到基于Java的网络框架的计划阶段,该网络框架对ajax,富媒体内容,混搭,基于模板的布局,验证,最大html /提供内置支持java代码分离。Grails看起来是一个不错的选择,但是,我们不想使用脚本语言。我们要继续使用Java。基于模板的布局是首要考虑的问题,因为我们打算将此Web应用程序与多个功能相似但外观完全不同的网站一起使用。

基于门户的解决方案是否非常适合此问题?

有关使用“ Spring Roo”或“ Play”的任何见解都将非常有帮助。

我没有找到类似的职位像这样,但它是一个多岁。同时,情况肯定发生了变化!

编辑1:感谢您的伟大答案!该网站正成为最佳的渠道内程序员信息的单一来源。但是,我期待有关使用Portal-cms二重奏的更多信息。贾伊亚(Jahia)看货。有什么相似之处吗?


1
“我们不想使用脚本语言”,真可惜,为什么我可以问?如果您喜欢Play框架,则应尝试使用带有Rails的JRuby。它不是普通的Java,但是从JRuby调用Java类非常容易。
路加福音

2
Grails(即Groovy)在Java中的表现非常出色,无需担心。
Erich Kitzmueller 2010年

4
@hbagchi:很好奇;4个月后,您使用了哪个框架?满意吗?
约尼克

1
这不是“社区维基”的问题吗?
mickthompson

11
“但是它已经使用了一年多。在此同时,情况肯定发生了变化!” ...哦,是的,上帝禁止您使用超过12个月的技术!Silver Bullet肯定是在此期间发明的... :-)
ObiWanKenobi 2010年

Answers:


146

基于门户的解决方案是否非常适合此问题?

就个人而言,我会远离大型门户网站解决方案(它们通常是生产力的杀手ers)。虽然我听说过有关Gatein的消息,但我没有任何实际经验。

有关使用“ Spring Roo”或“ Play”的任何见解都将非常有帮助。

关于Spring Roo,我已经在互联网上阅读过诸如Spring Roo Vs(Wicket和Spring)之类的先前答案以及其他内容,但是我仍然不确定(也许我不明白),我不确定它的成熟度,更重要的是,我真的想知道SpringSource对Grails和Roo做了什么(不,Grails与Roo –为什么SpringSource推动了两种非常相似的技术?使我无法说服它们都可以生存)。

关于Play,我不能说太多。我已经像所有人一样看过该演示,但我想阅读现实生活中的反馈。在那之前,我将等待。

我确实找到了类似的帖子(...)。同时,情况肯定发生了变化!

是的,不是:)但是,让我们进入演示框架吧:您的问题没有一个答案(就像一年前一样),周围有数十个框架,而且没有明确的赢家。仅举几例:

  • JSF:很多人都对基于组件的框架持怀疑态度,包括我在内,所以我不是谈论它的最佳人选,但是...
  • JSF 2(+ CDI /焊接):鼓励JSF怀疑论者(由Gavin King “重新审视”。确实,我认为JSF 2是一个很大的改进,尤其是对于CDI而言,但是...它仍然是很新的(理解,它没有费用返还)。如果您想使用Java EE 6,请进行检查。
  • Wicket:另一个基于组件的框架正受到越来越多的关注。我听到的大部分都是关于它的好处:比JSF简单,好设计,可测试性高,对HTML设计人员友好等。
  • Tapestry:别这么做(请参阅为什么停止使用Tapestry?
  • Struts 2,Spring MVC,Stripes:基于动作的框架。一切都不错,并且可以满足您的需求(个人而言,我喜欢Stripes及其在配置方法上的约定,请参阅Stripes vs. Struts2了解它)。
  • GWT,Flex,Grails:这些可能不是您想要的。我不能真正谈论Flex和GWT(最新版本),但我知道Grails确实 一些 支持者

实际上,我建议您看一下Matt Raible的演讲,他在比较Web框架,显示其优势和劣势,收集事实和数字,显示趋势方面确实做得非常出色。我建议:

确实,看看这些演示文稿,它们将帮助您找到合适的框架(没有唯一的答案,但是您可以通过消除选择来限制选择),并且可能会改变您的观点。


干得好,我退出了:)。+1
Adeel Ansari

Matt最近在java web f / ws上开枪是可怕的。如果我还记得的话,struts的分数实际上要高得多,f / ws也要丰富得多。没有人会认为像简直像简谱一样简直值得一提的东西,只比GWT或Wicket落后几分。
mP。

3
是的,我知道很多人不喜欢我的“矩阵”或我对其评分的逻辑。最后,我希望对这个矩阵做的只是简单地强调一种选择Web框架的技术。您可以在以下博客文章中了解我的评分背后的逻辑:raibledesigns.com/rd/entry/how_i_calculated_ratings_for
Matt Raible 2011年

Matt Raible关于比较JSF,Spring MVC,Stripes,Struts 2,Tapestry和Wicket的演示确实很老...
Nerrve

1
@iberck,我最近一直在尝试AngularJS。老实说,我相信它将覆盖大多数(如果不是全部)当前的Web框架而毫不夸张。它只是用于客户端的JS框架,因此您可以使用REST从服务器轻松,“高效”地检索数据。尝试一下,它将震撼
Muhammad Gelbana

41

我已经使用Spring 3和Jquery一段时间了,但是听说了Play并试了一下。我真的很喜欢,Play非常适合PHP之类的东西和诸如Spring之类的重型Java框架。

我最喜欢玩的东西是:

  • 很容易就可以创建一个播放应用程序,您必须在编码和配置上走得很远,才能使用Spring在屏幕上获得一个简单的原始应用程序(尽管Spring 3使它变得容易得多)。
  • Spring Security很棒,但是却以复杂性为代价。Play的安全模块非常简单,可以满足大约90%的应用程序的需求。
  • 您可以进行代码更改,然后在浏览器中单击“刷新”以查看更改,就像使用PHP一样,而不必使用基于Servlet的框架进行整个重新部署。
  • 错误消息可以很好地显示,并且在大多数情况下不是那么神秘。Play仍需要进行错误处理
  • Play的插件机制非常简单。
  • 对象持久性非常好,因为该框架附带内存数据库和JPA,因此无需配置外部对象持久性工具。从内存数据库到实际的RDBMS是配置文件中的一行更改。
  • MVC设置非常好。您扩展来创建域对象的Model类与JPA实体管理器集成在一起。他们不只是POJO的。
  • 将URL映射到控制器既简单又灵活,并且都在一个“路由”文件中。
  • 每当您创建项目时,Play都会处理所有jar依赖项,并且Play具有一个实用工具来对项目进行月食化(或您喜欢的任何IDE),以便将其直接导入到您喜欢的IDE中。

我不喜欢Play的事情

  • 文档还不完整,仍然存在许多未记录的功能。
  • 该框架是服务器,因此您必须为每个应用程序专用一个端口。我认为有人正在开发虚拟主机插件,但我还没有看到它的实际应用。
  • 它还很年轻,项目很棒,技术很棒,但确实需要更多开发人员。我们将花一些时间来解决这个问题。

17

我的首选是Wicket。标记和Java代码清晰分开。非常容易编写和使用组件。简单易用的Ajax,可测试性。您可以直接在页面/组件中进行调试,而不会从JSF实现中获得含糊不清的错误消息;)

性能方面,还有一个比较好的检票口<-> JSF


4
+1更不用说具有继承,多态性和组成的纯OOP定向了。此外,XML-config文件免费!
哈维·洛佩斯

3
对此人们表示怀疑,因为他们不喜欢建议的框架。不只是我的检票的答案,几乎所有有一定的下降票..
BERT

13

对我而言,前三个选择是(按字母顺序):

他们:

  • 有很好的ajax支持
  • 允许您创建实际的网站,而不是应用程序(例如GWT)
  • 稳定,有据可查,用途广泛
  • MVC
  • 纯Java
  • 与Spring轻松集成为中间件

17
我不知道如何宣称JSF可用于“制作实际的网站”。在这方面,任何强制使用POST的框架都会立即丢失。
Stefan Tilkov

3
我已经使用JSF开发了“实际网站”,并且已经使用了它,没有任何问题。此外,仅在发布内容时才强制使用POST。您始终可以使用简单的GET导航。从理论上讲,如果您正在修改资源,则使用GET是错误的,不是吗?
博佐2010年

另外,您还必须对Pascal进行
投票

3
没冒犯,但这听起来像是您几年前见过的“东西”清单,所以我很惊讶地看到它。以我的经验,大多数人从这些失误中走了出来。我想如果您已经是这些方面的专家,那么它们将是绝佳的选择,但我会担心那些在专家离开项目后必须接任的O&M程序员。国际海事组织再也没有人真正学习到这些东西了。
Manius 2010年

1
这句话确实有点搞笑。当然,JSF可以很好地用于网站,并且对GET和POST都具有一流的支持。使用最适合当前情况的东西。实际上,正如Bozho指出的那样,如果它修改了资源,请不要使用GET,否则请随意使用。
2011年


10

与其他答案相反,我要强调流行的Web框架的缺点(IMHO):

JSF2-已发布,并且已经过时。仍然只有很少的新闻/文章/博客文章/经验。我很怀疑。仍在等待完全支持jsf 2的Richfaces / Icefaces的下一个主要版本-当前只能下载Alpha版本。

Struts 2-如果您仍然依赖Struts并想重构大部分代码,这似乎只是一件好事。否则:不要。

GWT-我不喜欢单页和java-> javascript方法。我不确定是否一个会话-可以轻松实现多个视图/窗口。对我而言,该框架应用于大量用户的单窗口富Internet应用程序。

便门不错的方法,但是有点冗长,可用的文档太少(除了行动手册中的好检票口,但这仅涵盖1.3)。而且,对我而言,它缺少大型项目,而大型项目却建在其上。我目前无法看到检票口的路往何处行驶,或者是否已经驶入尽头。

Spring MVC-尚未尝试过,但是您必须在类路径中包含许多jar(春季混乱),才能正确使用此框架。而且它依赖于JSP(在大多数项目中),我认为它已经死了。而且,您只有一个纯MVC框架-所有其他内容(ajax和其他东西)都必须实现/集成。

Stripes(条纹) -一个设计精巧的MVC框架,但是文档太少,提交/提交者太少,发行版太少,行业支持太少,邮件列表活动太少。

我也很好奇我是否错过了一个主要框架(我故意离开了Tapestry),这可能是您(也是我)的一个选择。


我发现处理此问题的最佳方法类似于Python Web框架所做的事情:从最佳方法中进行挑选。例如:Spring + JAX-RS
Adam Gent 2010年

您对GWT的评论是错误的。有许多单独的页面而不是一件大事很容易。插入指向另一个页面的链接以开始另一个“动作”,一切顺利。
mP。

我也在谈论多个窗口(或选项卡)。真的可以同时使用同一会话使用多个窗口吗?
MRalwasser,2011年

1
+1为什么此帖子有2条负面声音?像这样的持怀疑态度的人与持肯定态度的人同样重要(如果不是更多的话)!在我看来,这些就像建设性的。
Piotr Sobczyk 2012年

8

我在JAX-RS上取得了巨大的成功。它是唯一具有某种JS​​R规范和多种实现(而不是servlet和portlet规范)的Java Web Framework(尽管这可能是一件坏事)。

关于Java的坏处之一是,您可以选择和匹配框架(python也具有此功能/问题)。很好,因为您不必将所有鸡蛋都放在一个篮子里。

这是一般的Java Web应用程序堆栈配方:

Javascript / Flash +请求/响应处理+依赖注入+持久性

Javascript: JQuery,Prototype,Dojo

请求/响应: Spring MVC,Stripe和我最喜欢的JAX-RS(Jersey,Apache CXF)

依赖注入:春季,吉斯

持久性: JPA(Hibernate,Google App存储),Hibernate,JDO等。

在使用AspectJ使Java“减少吸气”方面,我也取得了巨大的成功。通过使用Spring的@Configurable和AspectJ的ITD mixin,您可以像域对象一样获得Rails(这实际上是Roo所做的,但您不需要Roo可以做到)。


4
我同意。花费更多的时间来建立自己的堆栈,但随后您将获得所需的内容。我目前正在使用jQuery,Jersey,Spring和JPA2。JAX-RS很棒,因为您可以完全控制自己的响应。
Brian DiCasa 2011年

6

我发现条纹真的很有效,而且出奇的轻巧。。。它的目的是比支杆更轻巧。我已经从全职Web开发人员的朋友那里听说,尽管我没有第一手经验,但JSF并不值得打扰,并且无法通过示例(!)进行支持。


5

看看RESThub,它遵循与Play相同的原理!但通过重用一些企业级框架/工具(例如Maven 3 / Spring 3 / Jersey / jQuery)来实现。

与其他框架相比,RESThub具有很大的破坏性,因为它是一个完整的堆栈工具箱,但是没有任何基于服务器端MVC或Servlet的框架。相反,它使用基于jQuery UI的GUI(使用JAX-RS(REST)Web服务)和基于EmbeddedJs的Javascript模板系统。

服务器是无状态的,我们使用HTML5 sessionStorage将会话保持在客户端。此方法是针对RIA和可伸缩性设计的。

提供了一些演示应用程序(即使正在构建中)。


3

JSF是一个不错的框架,但是JSF 1.2缺少发布它多年的愿景。JSF 2.0看起来很有希望,并且在JSF 1.2的基础上增加了许多新功能,例如ajax支持,facelets,注释支持和默认约定(较少的XML),比1.2易于构建的组件。

如果您需要DI支持,它也可以与Spring很好地集成。


2

我会推荐春季建议。我不是GWT的忠实拥护者,我认为Java-> Javascript交叉编译器还不存在。我正在使用在服务器上使用spring并在客户端上使用jQuery的AJAX应用程序。尽管从技术上讲,没有对jQuery的“开箱即用”支持,但实现spring-MVC AjaxView却非常简单,大约需要25行代码。


2

也许演出晚了一点,但我不得不Vaadin。编程仅使用Java的基于组件的方法来完成。客户端-服务器通信更多地是关于用户交互,而不是数据传输,所有业务逻辑都驻留在服务器上。


1
我使用vaadin,但这对于构建复杂的应用程序并不好。
Radan 2013年





0

基于播放器的RIA框架值得一提。例如 Adobe Flex + Java(当然,这可能取决于您的“站点”是真正的“站点”还是更像是“应用程序”,而您不会在Flex中创建博客站点。)

阿贾克斯

在AJAX即流行的意义上,Flex通常使用AMF(比AJAX应用程序使用的协议更有效的二进制协议),尽管您也可以使用Flex严格执行AJAX的工作。因此Flex支持AJAX,但也支持“优于AJAX”。

富媒体内容,混搭,

由于Flex在Flash“虚拟机”平台上运行,因此我认为几乎不需要添加任何内容。

基于模板的布局,

不知道这到底是怎么回事,但这听起来像Flex mxml。

验证,

当然可以支持,但是如果您想花哨的话,可以决定做一些自定义的工作。(不是必须的。)令人高兴的是,您可以根据自己的喜好而做,也可以不做。

最大的html / java代码分隔

使用诸如Flex / Silverlight / JavaFX之类的“虚拟机”开发方法无法将您分开。这不仅使您能够将表示代码与服务器端逻辑和数据访问层分开,还可以确保它们被分开。“虚拟化”您的开发环境可为您提供跨浏览器的兼容性,一致的目标平台,无需担心新的浏览器或新的浏览器版本会破坏您的应用程序,一流的Java调试功能以及更专业/令人印象深刻的最终产品。

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.