针对可扩展性构建的 4 大 Java Web 框架

还没有读者喜欢这篇文章。
Arrows moving a process forward

Opensource.com

如果你从头开始编写 Web 应用程序,你将需要选择一个框架来简化你的工作并减少开发时间。Java 是最流行的编程语言之一,它提供了大量的选择。

传统的 Java 应用程序,特别是面向 Web 的应用程序,是构建在模型-视图-控制器 (MVC) 框架之上的,该框架遵循 MVC 软件架构模式。从 Apache Struts 开始,MVC 框架一直是 Java 开发的主要组成部分,其中包括 WebWorkSpring MVCWicketGWT 等流行的框架。通常,这些应用程序将视图代码托管在服务器上,在那里进行渲染并交付给客户端(Web 浏览器)。在浏览器中点击链接或提交表单,它会向服务器提交请求,服务器执行请求的工作并构建一个新的视图,刷新客户端中的整个显示。

快进到 2015 年,大多数 Java 应用程序(特别是企业应用程序)仍然遵循相同的模型。然而,这并不是 Web 上的主导模型,Web 上期望快速和响应式的用户界面,保存按钮是可选的,并且需要移动可访问性。如今,流行的软件架构是面向服务的,最近有很多关于微服务的讨论——微服务是执行一个小型工作单元的独立服务,并且可以与系统的其他功能分开扩展(增加容量)。

幸运的是,Java 社区充分意识到了这些变化,并且存在新的框架和范例。我们将探讨其中的四个:Spring、Play、Dropwizard 和 Spark。

标准

在选择要讨论的框架时,考虑了几个标准

  • 在 OSI 批准的开源许可证下发布。
  • 应该能够快速启动项目并生成原型。
  • 需要集成到 HerokuDocker 等容器中,以便更轻松地部署。
  • 无痛地支持面向服务和微服务架构。
  • 必须支持 Twelve-Factor App 方法论。

Twelve-Factor App 是 Heroku 的创始人创建的一份文档,描述了使应用程序能够通过托管环境管理实现 Web 规模的功能。遵循 Twelve-Factor 方法论是开始为现代 Web 构建应用程序并摆脱 Java 应用程序的传统企业模型的绝佳方式。

每个框架都以不同的方式提供基本功能,总结如下

Spring (Boot) Play Dropwizard Spark
许可证 Apache 2 Apache 2 Apache 2 Apache 2
HTTP Undertow1 Netty Jetty Jetty
REST Spring MVC2 Play5 Jersey Spark5
JSON Jackson3 Jackson Jackson Gson
模板 JSP4 Twirl Mustache4 Mustache4
WebSockets Spring API5 Play5 通过 Jetty 通过 Jetty
DB/ORM Spring Data5 Ebean JDBI [MyBatis]6
身份验证 Spring Security5 Play5 Dropwizard5 [Shiro]6

1 Spring Boot 也支持 Tomcat 和 Jetty。
2 Spring 也支持使用 Jersey 的 JAX-RS。
3 Spring 可以配置为使用 Gson 而不是 Jackson。
4 其他可用的模板引擎可能包括 Freemarker、Velocity、Thymeleaf、Tiles、Handlebars 和 Jade。
5 此功能内置于框架中。
6 作为一个轻量级框架,Spark 没有数据库或身份验证组件,但是其他轻量级、单用途的、在 Apache 2 许可证下的第三方组件对于这个框架来说是有意义的

Spring

Spring 于 2004 年首次发布,是我们列表中最古老的框架。它是最流行的 Java 框架,几乎是企业界 Java 开发的代名词。随着它扩展到包含完整的 MVC 框架,它继续适应变化,并且是一个真正的全方位服务框架,为安全性、Web 服务、数据库集成等提供服务。

最新的改进之一包括 Spring Boot,它提供了必要的配置和工具,可以快速启动应用程序并轻松创建独立的应用程序。

虽然 Spring 很受欢迎,但它并非没有缺点。对于许多应用程序来说,Spring 的“面面俱到”方法可能会增加不必要的复杂性,特别是与 Java 企业版相比,后者在其最新版本中包含了 Spring 的许多核心功能。

Play

Play 框架(不要与 Google Play 混淆)在我们的列表中受欢迎程度和资历都位居第二。它于 2007 年被构思为一个 Web MVC 框架,支持 REST Web 服务作为一等公民。除了 Java 之外,Play 还支持 Scala,这是一种在 Java 虚拟机上的面向对象的函数式语言。

与其他框架的其他重要区别包括异步 I/O、无状态服务和一流的 JSON 支持。开发人员的生产力部分地由于即时代码刷新而得到提高,这不需要重新发布或重新启动。

然而,也存在一些潜在的缺点。Play 选择了完全打破传统的 Java 企业范例,例如 Servlet 规范。这可能会导致某些第三方库无法使用。此外,一些 Java 开发人员抱怨 Play 的 Scala 影响很强,这改变了使用该框架所需的思维模式。

Dropwizard

像 Spring Boot 和 Play 一样,Dropwizard 专注于 Java Web 应用程序和 REST 服务的快速开发和部署。虽然它提供了一些有限的自身功能(例如身份验证),但 Dropwizard 主要专注于组件之间的“粘合剂”,以提供更集成的开发体验。它被设计为一个简单、轻量级的框架,包含部署 Java 项目所需的一切。

Dropwizard 仍在积极开发中,尚未达到 1.0 版本。然而,它基于一些非常稳定、一流的库,这些库已经独立实现了稳定性和成熟度。

Spark

Spark 始于 2011 年,是一个具有前瞻性的框架,基于简洁性并以 Ruby 的框架为模型。截至 2014 年发布的 Spark 2.0,该框架仅支持 Java 8。Spark Java 不应与大数据引擎 Apache Spark 混淆。

Spark 快速入门是一个“Hello World”Web 服务器,仅需 6 行代码。它是为 REST Web 服务构建的,并且比典型的 Java 解决方案(如 JAX-RS)简单得多。重点是开发人员的生产力,极其轻量级的框架只提供必要的东西,仅此而已。

与任何其他微框架一样,Spark 的弱点在于它忽略的细节。诸如安全性、数据库连接性等方面的考虑留给开发人员使用其他框架或库来处理。

选择

选择合适的框架可能具有挑战性,每个组织都将自己的偏好应用于决策过程。拥有一个全包罗万象的框架,还是一个更轻量级、更少主观性的框架,让您可以选择自己的库,哪个更有意义?您的团队是否愿意学习新系统?使用预发布或 Beta 软件的容忍度是多少?

无论您选择哪个框架,都要考虑许可证、社区活动和对项目的支持以及成品的稳定性。祝你好运,编码愉快。

User profile image.
Michael Dowden ​是 ​CSpring 的高级主管和软件架构主管,他在那里使用 Java 和开源工具及方法论。他组织了印第安纳波利斯 Java 用户组,并定期就软件开发主题发表演讲。访问他的 ​LinkedIn​ 个人资料或在 Twitter 上关注他 @mrdowden​。

9 条评论

我肯定会将 Grails 纳入比较,因为 - 以我的经验来看 - 它很容易成为 Java 领域最高效的 Web 框架。它的最新迭代版本 (Grails3) 基于 Gradle 和 Spring Boot,因此在技术上非常接近 Spring。

感谢您的评论!我的目标是比较支持 Twelve-Factor App 的 Java 语言 Web 框架。基于 JVM 的框架太多了,选择要写的框架很有挑战性,但 4 个似乎是进行简短、有凝聚力的比较的合适数字。如果您知道 Grails 和其他一些框架之间的任何好的比较,我很乐意看到它。

回复 作者:sola (未验证)

JSF 2.2 在哪里?说真的... 你不能在不忽略标准化的 JSF 的情况下谈论 Java Web 开发。而且,你所有的例子都是第三方产品。

JSF 不符合本文框架选择的标准。作为一个视图框架,它在面向服务或微服务框架中没有提供太多价值。它也不支持无状态应用程序,尽管从 v2.2 开始,无状态视图是可能的。许多现代 Java Web 框架现在使用 JavaSE 而不是 EE。在 Web 讨论中包含 JavaEE 或 JSF 并没有特别的优势,因为它们缺乏相关性。

回复 作者:sjan (未验证)

你也应该将 meteor.js 添加到此列表中。

Meteor 是一个 JavaScript 框架。本文严格关注 Java 框架。

回复 作者:Lance Haig (未验证)

Struts2 怎么样?除了开发周期短之外,还有其他省略它的原因吗?

感谢您的评论!是的,缺乏快速启动绝对是这个特定列表的主要缺点。

由于大多数评论似乎都是“为什么不是 X 框架”,我想指出的是,这从来没有打算成为前 4 名列表,而是一个“这里有 4 个您应该考虑的框架”列表。我想展示“传统”集合之外的框架。很容易假设大多数 Java Web 开发人员至少大致熟悉 JSF 和 Struts。

Spring 入选列表的唯一原因是,我觉得 Spring Boot 倡议(结合稳定性和灵活性)使其成为现代 Web 开发的引人注目的选择。

回复 作者:mylogin13 (未验证)

Creative Commons 许可本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.