Java应用服务器对比 Tomcat、Jetty、 GlassFish、WildFly

时间:2021-11-21 05:47:04

Tomcat vs. Jetty vs. GlassFish vs. WildFly

如果要编写Java Web应用程序,首先需要做的是做出一个困难的决定, 我们该选择哪种服务器来运行Java应用程序呢?这是一个艰难的选择,因为那里有许多优秀的选择,它们之间的差异并不总是显而易见的。

首先回顾下什么是应用程序服务器?一般来说,应用服务器执行Java应用程序。您可以在操作系统中启动它们,然后将应用程序部署到它们中。将应用程序服务器视为运行Java代码并使其正常运行的容器。此外,应用程序服务器还提供了一些可在您自己的代码中使用的通用基础结构和功能。

在本文中,我将介绍免费和开源Java应用程序服务器之间的高级别比较。

Tomcat

Java应用服务器对比 Tomcat、Jetty、 GlassFish、WildFly

Tomcat是Apache Software Foundation开发的与Java Web应用程序一起使用的应用程序服务器。Tomcat的市场份额占到了所有Java应用服务器部署的60%。

然而,关于Tomcat作为应用服务器的优点,存在一些混淆(甚至是争议)。在技术上称它为应用服务器……事实并非如此。

让我解释。还记得当我说应用服务器为你的应用程序提供一些基础设施和功能吗?嗯,这套功能并不是随意的。称为Java EE的规范精确定义了应用程序服务器的功能。因此,严格地说,我应该只调用名称应用程序服务器通过Java EE兼容性测试的容器。截至今天,Oracle也列出了三个这样的容器。

Oracle已将Java EE转移到Eclipse Foundation,现在它在Java EE 8之后被称为Jakarta EE。此外,现在还有一个完整EE平台的Web Profile子集,以及一个仅支持servlet的Web容器。

实际上,Tomcat没有实现Java EE应用程序服务器所需的所有功能。Tomcat的准确标题是“web服务器”或“servlet容器”。但即使Tomcat不支持开箱即用的某些Java EE功能,您仍然可以使用大多数这些功能。您只需将它们作为应用程序中的其他第三方依赖项包含在内。

因此,Tomcat是成熟的,文档齐全的,也是使用最广泛的Java应用程序服务器。凭借良好的文档以及在互联网上关于它的教程,Tomcat几乎在所有Java Web应用程序中都是应用服务器中最有利的竞争者。

Jetty

Java应用服务器对比 Tomcat、Jetty、 GlassFish、WildFly

Jetty 是另一个应用程序服务器(由Eclipse Foundation开发),从技术上讲,它不是一个功能齐全的Java EE容器。就像Tomcat一样,它缺乏对许多Java EE功能的支持。就像Tomcat一样,您仍然可以通过添加其他第三方依赖项来使用大多数功能。

虽然Jetty的市场份额远不及Tomcat的市场份额,但它仍然广泛应用于行业。它的两个主要卖点是紧凑和占地面积小。两者都使Jetty非常适合受限环境和嵌入其他产品。

GlassFish

Java应用服务器对比 Tomcat、Jetty、 GlassFish、WildFly

GlassFish是由Oracle开发的功能齐全且经过认证的Java EE应用服务器。因此,GlassFish比Tomcat或Jetty更重量级,并且可以说,操作起来有点困难。

事实上,GlassFish不仅仅是一个通用的Java EE应用服务器。它是Java EE标准的参考实现。这意味着GlassFish用于展示Java EE功能,它得到了定义Java EE标准的贡献。因此,GlassFish将始终首先支持最新的Java EE功能。这是一个加分项。

GlassFish的缺点是缺乏商业支持。是的,这篇文章是关于免费和开源应用服务器的,但这仍然是一个重点。随着项目的发展和财务上的成功,您可能愿意为应用程序服务器获得长期支持,安全更新,客户支持等。这就是商业支持所提供的,许多公司都会购买它。因此请记住,如果您将来使用GlassFish并需要商业支持,则需要迁移到完全不同的应用程序服务器。

WildFly

Java应用服务器对比 Tomcat、Jetty、 GlassFish、WildFly

WildFly,以前称为JBoss Application Server,由红帽 (Red Hat)开发,是另一个功能齐全且经过认证的应用服务器。

WildFly相对于GlassFish的最大优势是Red Hat提供了从WildFly到其商业支持的应用服务器JBoss企业应用程序平台的简单迁移路径。这意味着您可以立即使用WildFly,并在将来快速迁移到JBoss EAP,以获得商业支持,如果您确定需要的话。

Java应用服务器对比 Tomcat、Jetty、 GlassFish、WildFly

我们该如何选择应用程序服务器

这是一个细致入微的问题。说实话,答案因项目而异。

如果您不需要Java EE功能(例如,您将使用Spring Framework),那么我会说使用Tomcat。这是事实上的行业标准,因此,如果您选择它,您将有最简单的时间查找文档和示例。但是,如果您已经知道将在受限环境中运行应用程序,请考虑选择Jetty,因为它占用空间较小。

如果您计划编写Java EE应用程序,那么事情会变得更加细微。

正如我已经说过的,可以通过包含第三方依赖项来使用Tomcat来运行Java EE应用程序。因此,如果您知道只使用一小部分Java EE,那么Tomcat仍然是一个不错的选择。例如:如果您只需要JPA实现,那么将EclipseLink导入到您的项目中就可以了,您可以愉快地继续使用Tomcat。但是,如果您知道您将大量使用Java EE,或者您需要的功能不能作为第三方插件使用,那么请使用WildFly。

结论

总的来说,我建议支持Tomcat,但如果你需要更小的足迹,可以考虑Jetty。否则,如果您需要在项目中使用大量Java EE支持,请使用WildFly。