如果您要从头开始编写 Web 应用程序,则需要选择一个框架,以简化您的生活并缩短开发时间。Java,最流行的编程语言之一,提供了很多选择。
传统的 Java 应用程序,尤其是面向 Web 的应用程序,是构建在模型-视图-控制器 (MVC) 框架之上的,该框架遵循 MVC 软件架构模式。从 Apache Struts 开始,MVC 框架一直是 Java 开发的主要组成部分,其中包括流行的框架,如 WebWork、Spring MVC、Wicket 和 GWT。通常,这些应用程序将视图代码托管在服务器上,并在服务器上呈现并交付给客户端(Web 浏览器)。在浏览器中单击链接或提交表单,它会向服务器提交请求,服务器执行请求的工作并构建新视图,从而刷新客户端中的整个显示。
快进到 2015 年,大多数 Java 应用程序(尤其是企业应用程序)仍然遵循相同的模型。然而,这并不是 Web 上的主导模型,在 Web 上,人们期望快速且响应迅速的用户界面,保存按钮是可选的,并且需要移动设备的可访问性。如今,流行的软件架构是面向服务的,最近围绕微服务进行了很多讨论——微服务是单独的服务,每个服务只执行一个小型工作单元,并且可以与系统的其他功能分开扩展(增加容量)。
幸运的是,Java 社区非常了解这些变化,并且存在新的框架和范例。我们将探讨其中的四个:Spring、Play、Dropwizard 和 Spark。
标准
在选择要讨论的框架时,考虑了以下几个标准
- 根据 OSI 批准的开源许可证发布。
- 应该能够快速启动项目并生成原型。
- 需要集成到容器中,例如 Heroku 或 Docker,以便于部署。
- 轻松支持面向服务和微服务架构。
- 必须支持十二要素应用方法。
十二要素应用是由 Heroku 创始人创建的文档,描述了使应用程序能够通过管理托管环境来实现 Web 规模的功能。遵循十二要素方法是开始为现代 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 |
数据库/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 年首次发布,Spring 是我们列表中最古老的框架。它是最流行的 Java 框架,几乎是企业界 Java 开发的代名词。随着它扩展到包含完整的 MVC 框架,它不断适应变化,并且是一个真正的全方位服务框架,为安全性、Web 服务、数据库集成等提供服务。
最新的改进之一包括 Spring Boot,它提供了使应用程序快速启动和轻松创建独立应用程序所需的配置和工具。
虽然 Spring 很流行,但并非没有缺点。对于许多应用程序来说,Spring 的“包罗万象”方法可能会增加不必要的复杂性,特别是与 Java 企业版相比,后者在其最新版本中包含 Spring 的许多核心功能。
Play
Play Framework(不要与 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 版软件的容忍度是多少?
无论您选择哪个框架,都要考虑许可证、社区活动以及对项目的支持以及最终产品的稳定性。祝您好运,编码愉快。
9 条评论