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

Java应用服务器市场占有量

如果要编写Java Web应用程序,首先需要做的是做出一个困难的决定:选择运行应用程序的Java应用程序服务器。这是一个艰难的选择,因为那里有许多优秀的选择,它们之间的差异并不总是显而易见的。在分析瘫痪状态下很容易结束。

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

Tomcat

Tomcat是Apache Software Foundation开发的与Java Web应用程序一起使用的最流行的应用程序服务器。一些消息来源声称Tomcat的市场份额超过所有Java应用服务器部署的60%。

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

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

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 EE应用程序。我猜你正在寻找一个解决方案而且对术语错综复杂并不感兴趣,所以我会继续调用Tomcat(以及后来的Jetty)一个应用程序服务器,以避免使用太多术语使事情变得复杂。

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

Jetty

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

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

GlassFish

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

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

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

这对你来说可能听起来不是什么大不了的事,但它对许多企业来说都是一个交易破坏者。至少考虑一下您未来的需求。

WildFly

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

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

红帽也是最受尊敬的软件供应商之一。这说明了公司的政策和客户支持。注:Red Hat刚刚以340亿美元被IBM收购,这是有史以来最大的一笔交易。

应用服务器的选择

那么你应该在自己的项目中使用哪个Java应用服务器?

这是一个细致入微的问题。说实话,答案因项目而异。话虽这么说,我仍然想要一个可以帮助你选择的一般框架。

如果您的组织已经在其他项目中使用了特定的应用程序服务器,那么最好的办法就是坚持使用,如果可能的话。标准化总是一个好主意。此外,能够转到另一个团队寻求帮助是非常宝贵的。

这很简单。现在让我们说这不适用; 您的组织尚未使用特定的应用程序服务器。

如果您不需要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。最重要的是,如果您的组织已经在其他项目中使用了特定的应用程序服务器,那么只需效仿。

发布了248 篇原创文章 · 获赞 32 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/tianshan2010/article/details/103966074