【问题标题】:What are the pros and cons of the assorted Java web frameworks? [closed]各种 Java Web 框架的优缺点是什么? [关闭]
【发布时间】:2010-09-06 16:17:27
【问题描述】:

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

我的网站一开始只是为了让我自己享受构建它的乐趣,但如果它变得流行,它具有一定的可扩展性,或者至少能够为此重新设计会是件好事。

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

有没有人对其中一些框架有经验并可以提出建议?选择的数量之多是否只是作为尽可能避免基于 Java 的 Web 开发的预警?

【问题讨论】:

  • 在某种程度上,这就像在说“快速搜索工具返回 50 多个可供选择;我应该选择锤子、螺丝刀还是钳子?”尽管如此,对于子问题,这是一个不错的“主观好”问题。
  • "Funny" 像往常一样,非常有用的问题和答案(我刚刚订购了有关 Wicket 的书,谢谢大家),但整个帖子因不具建设性而关闭。 “这个问题很可能”——还有这个干巴巴的事实,没有什么投机性的,哦讽刺......

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


【解决方案1】:

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

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

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

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

【讨论】:

  • +1 该框架被重新命名为 vaadin(以前称为 ITMill)。我不得不说 vaadin 是一个非常漂亮的 web 框架,所有的 java 都没有。我觉得它很有成效。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我最喜欢的是 Spring 框架。使用 2.5 Spring MVC 真是太棒了,有了新的注释、约定优于配置功能等。

    如果您只是在做一些超级简单的事情,您也可以尝试使用常规的 Servlet API,而不必为框架而烦恼。

    【讨论】:

    • 赞成使用常规 Servlet API 来做一些简单的事情。
    • 我会避免使用任何“web mvc”框架,原因在 Wicket In Action 的(免费)第一章中列出。另外,我会避免直接使用 Servlet API,除非您有一个单页应用程序或者您希望从头开始编写自己的框架。
    • 我也喜欢 Spring,但我发现所有配置只有在你编写一个强大的应用程序时才会得到回报。
    • 几乎没有任何使用注解的配置。
    • @bpapa 注解只是将配置放在你的java类而不是xml中。
    【解决方案4】:

    我也听说过有关 Spring 框架的好消息。不过,总的来说,我对我看过的大多数 Java Web 框架(尤其是 Struts)都不甚满意。

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

    【讨论】:

    • +1 表示“如果 servlet 写得好……”
    【解决方案5】:

    我已经相当广泛地使用了Tapestry 3WicketEchoJSF。我真的建议你仔细检查一下,然后选择对你来说最简单的一种,并且最适合你喜欢的工作方式。

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

    Echo 如果您不介意用 Java 编写所有布局,那就太好了。我知道现在情况不同了,但我仍然认为该产品服务于一个相当狭窄的利基市场。他们似乎在每个主要版本都改变了开发模型。

    Tapestry 是一款很棒的产品,但它的开发模式显然与其他产品有很大不同,因为它主要由一个家伙领导。 Howard Lewis Ship 无疑非常聪明,但我对他们决定基本上忘记与每个版本的向后兼容性感到失望。不过,对于您的需求,这可能无关紧要,而且我一直觉得 Tapestry 产品很适合使用。

    JSF 已经出现多年,但仍然感觉像是 Struts 为解决 Struts 的所有问题而构建的东西。没有真正理解 Struts 的所有问题。尽管该产品显然非常灵活,但它仍然具有未完成的感觉。我使用它并且对它有一些喜爱,对它的未来寄予厚望。我认为在 JEE6 中交付的下一个版本(2.0)将真正将它带入自己的状态,具有新的模板语法(类似于 Facelets)和简化的组件模型(自定义组件仅在一个文件中......最后)。

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

    最后,我建议您看看 Tapestry、Wicket 和 JSF,然后选择最适合您的。您可能会很快找到适合您喜欢的工作方式的一种。

    【讨论】:

    • 如果您的 Web App 是基于内容的论坛系统,我建议您使用 GWT 和 Ext-js。如果您的 Web App 更像是 ERP 终端之类的桌面应用程序,我建议您使用 ZK、Echo3、Vaddin 和 GWT。我不会建议任何 JSF 解决方案,因为没有“它是 JEE 标准”这一事实,我发现使用它们没有任何好处。
    • @Zanyking - 如果你的论坛需要 SEO,你会发现 GWT 很困难,imo。
    • JSF 对于一个网站来说可能是多余的,相反我会选择更高效的框架,...开发应该保持乐趣,而 JSF 的构建并没有考虑到“有趣”:)
    • Tapestry、Wicket、JSF 和 Echo 都是面向组件的,而 GWT、Ext-js 和 Vaadin 都是面向 Javascript 的。不要忘记查看所有精彩的“经典”MVC 框架,例如 Spring MVC、Play 框架、Grails 和 Stripes。它们的编程模型与以前的模型截然不同,但也有其他优点(这就是为什么有这么多框架的原因——不同的目的、需求和品味需要不同的工具)。
    【解决方案6】:

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

    它类似于struts,但远不止于此。甚至还有一些插件项目可以让您通过很少的配置就可以使用 hibernate 或 jpa。

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

    【讨论】:

      【解决方案7】:

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

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

      【讨论】:

        【解决方案8】:

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

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

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

        Howard Lewis Ship(Tapestry 的主要作者)无疑是一位出色的开发人员,但我不能说我关心他对 Tapestry 项目的管理。 Tapestry 5 的开发几乎是在 Tapestry 4 发布后立即开始的。据我所知,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 编写一个新的应用程序可能会很好。但就个人而言,我不想再把手放在燃烧器上。

        【讨论】:

        • 更新:随着时间的推移,Tapestry 项目似乎已被放弃。自 09 年 4 月以来,没有 Tapestry 5 版本,而 Tapestry 4 的 JIRA 中仍然存在许多突出的错误,自 08 年以来没有更新。因此,我不再推荐 Tapestry 作为 Web 应用程序框架的可行选择。
        • Tapestry 没有被抛弃。 Tapestry 5 分支相当活跃,5.1 作为稳定选项,5.2 即将推出。
        • 你是对的。事实上,Tapestry 5.2 已经发布了。我更新了帖子以反映我对 Tapestry 的最新看法。
        【解决方案9】:

        不敢相信没有人提到 GWT

        【讨论】:

        • 我不会真正将 GWT 视为一个 Web 应用程序框架(它更像是一个 Web 工具包,因此得名)。然而,GWT 很棒,例如与 Spring 配合得很好。
        • 框架或工具包,具体的区别是什么?使用 GWT 编码的感觉与使用框架和使用其他选项一样多。
        【解决方案10】:

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

        对于更复杂的应用,Spring MVC 或 Struts 2。

        【讨论】:

          【解决方案11】:

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

          【讨论】:

            【解决方案12】:

            我的选择是 Wicket!!

            【讨论】:

              【解决方案13】:

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

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

              【讨论】:

              • 在做我们销售的 Web 应用程序时,Jsp 对我来说是一种痛苦。更新将考虑 facelets。
              • 是的,此时我很确定:使用 facelets 而不是 JSP。它好多了,我没有看到任何(大)缺点。
              【解决方案14】:

              http://zkoss.org - 好人

              【讨论】:

                【解决方案15】:

                我自己没试过,但我觉得

                http://www.playframework.org/

                很有潜力……

                来自 php 和经典的 asp,它是第一个对我来说很有前途的 java web 框架......

                【讨论】:

                • 有趣的是,今天我第五次在 stackoverflow 上看到“我没用过,但我推荐 Play”。
                【解决方案16】:

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

                Spring MVC 将是一个候选者,但从 Spring MVC 3 开始,它有一个奇怪的注解重载编程模型,它没有使用静态类型的好处。还有其他丑陋的东西,例如方法中的输出参数与通常的返回相结合,因此一个方法有两个输出通道。 Spring MVC 也倾向于重新发明轮子,与其他框架相比,您将需要配置更多。尽管 Spring MVC 有一些不错的想法,但我不能真正推荐它。

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

                别忘了 Servlet API 和一些像 FreeMarker 这样的小助手用于模板是非常强大的。

                【讨论】:

                  【解决方案17】:

                  我的选择是 Wicket(适用于大型项目和可预测的用户群)、GWT(适用于主要面向公众的大型项目)或只是一个服务框架(如 Jersey/JAXRS)和 JavaScript 工具包(适用于小型到中型项目)。

                  【讨论】:

                    【解决方案18】:

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

                    【讨论】:

                      【解决方案19】:

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

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

                      干杯!

                      【讨论】:

                        【解决方案20】:

                        试试 HybridJava - 这比什么都简单。

                        【讨论】:

                        【解决方案21】:

                        查看一些关于一些 Java 应用程序框架的 cmets(第二段):

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

                        【讨论】:

                          【解决方案22】:

                          经过很长时间测试各种解决方案,对我来说结果是:

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

                          • 用于所有客户端的 jQuery

                          • Spring Security 用于安全方面

                          • 休眠/JPA2

                          • 码头为了延续(彗星)

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

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

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

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

                          • 对于我团队中的大多数开发人员来说,Scala 的函数式概念虽然非常出色,但很难理解

                          干杯 呃

                          【讨论】:

                          • 这都是好东西。不错的选择 spring MVC,保持安全(和明智)的一面。
                          【解决方案23】:

                          我会说vaadinwicket

                          【讨论】:

                            【解决方案24】:

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

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 2010-09-10
                              • 1970-01-01
                              • 1970-01-01
                              • 2010-10-29
                              • 1970-01-01
                              • 2011-08-05
                              • 2017-01-04
                              相关资源
                              最近更新 更多