Tomcatvs.Jettyvs.GlassFishvs.WildFly我们应该选择运行Java应用程序吗?这是一个艰难的选择,因为有很多优秀的选择,差异并不总是很明显。我们先来回顾一下什么是应用服务器?一般而言,应用服务器执行Java应用程序。您可以在操作系统中启动它们,然后向它们部署应用程序。将应用程序服务器视为运行Java代码并使其工作的容器。此外,应用程序服务器还提供了一些您可以在自己的代码中使用的通用基础结构和功能。在本文中,我将对免费和开源Java应用程序服务器进行高级比较。TomcatTomcat是由ApacheSoftwareFoundation开发的用于JavaWeb应用程序的应用程序服务器。Tomcat的市场份额占所有Java应用服务器部署的60%。然而,关于Tomcat作为应用服务器的优点存在一些混淆(甚至争议)。技术上称它为应用程序服务器……它不是。让我解释。还记得我说过应用服务器为您的应用程序提供一些基础设施和功能吗?好吧,这组功能不是任意的。称为JavaEE的规范准确定义了应用程序服务器的功能。所以,严格来说,我应该只调用名称为applicationserver通过JavaEE兼容性测试的容器。截至今天,Oracle还列出了三个这样的容器。Oracle已将JavaEE移至EclipseFoundation,在JavaEE8之后它现在被称为JakartaEE。此外,现在有一个完整EE平台的WebProfile子集,以及一个仅servlet的Web容器。事实上,Tomcat并没有实现JavaEE应用服务器所需的所有功能。Tomcat的确切名称是“web服务器”或“servlet容器”。但是,即使Tomcat不支持开箱即用的某些JavaEE功能,您仍然可以使用其中的大部分功能。您只需将它们作为其他第三方依赖项包含在您的应用程序中。因此,Tomcat是成熟的、有据可查的、使用最广泛的Java应用服务器。凭借Internet上关于它的良好文档和教程,Tomcat是几乎所有JavaWeb应用程序的应用程序服务器中的顶级竞争者。JettyJetty是另一个应用服务器(由Eclipse基金会开发),从技术上讲,它并不是一个功能齐全的JavaEE容器。就像Tomcat一样,它缺乏对许多JavaEE功能的支持。就像Tomcat一样,您仍然可以通过添加其他第三方依赖项来使用大部分功能。虽然Jetty的市场占有率与Tomcat相去甚远,但在业界仍然被广泛使用。它的两个主要卖点是紧凑和占地面积小。两者都使Jetty成为受限环境和嵌入其他产品的理想选择。GlassFishGlassFish是由Oracle开发的功能齐全且经过认证的JavaEE应用服务器。因此,GlassFish比Tomcat或Jetty更重量级,而且可以说更难操作。事实上,GlassFish不仅仅是一个通用的JavaEE应用服务器。它是JavaEE标准的参考实现。这意味着GlassFish用于公开JavaEE功能,并且为定义JavaEE标准做出了贡献。因此,GlassFish将始终首先支持最新的JavaEE功能。这是一个优点。GlassFish的缺点是缺乏商业支持。是的,这篇文章是关于免费和开源应用程序服务器的,但这仍然是一个重点。随着项目的发展和财务上的成功,您可能愿意为您的应用程序服务器获得长期支持、安全更新、客户支持等。这就是商业支持所提供的,许多公司都购买了它。所以请记住,如果您将来使用GlassFish并需要商业支持,您将需要迁移到一个完全不同的应用程序服务器。WildFlyWildFly,前身为JBoss应用服务器,由RedHat开发,是另一种功能齐全且经过认证的应用服务器。WildFly相对于GlassFish的最大优势在于,RedHat提供了从WildFly到其商业支持的应用程序服务器JBoss企业应用程序平台的简单迁移路径。这意味着您现在可以使用WildFly,如果您决定需要的话,将来可以快速迁移到JBossEAP以获得商业支持。我们如何选择应用服务器是一个微妙的问题。老实说,答案因项目而异。如果您不需要JavaEE功能(例如,您将使用SpringFramework),那么我会说使用Tomcat。这是事实上的行业标准,所以如果您选择它,您将最容易找到文档和示例。但是,如果您已经知道您将在受限环境中运行您的应用程序,请考虑选择Jetty,因为它占用空间较小。如果您打算编写JavaEE应用程序,事情就会变得更加微妙。正如我已经说过的,通过包含第三方依赖项,可以使用Tomcat来运行JavaEE应用程序。因此,如果您知道自己只使用了JavaEE的一小部分,Tomcat仍然是一个不错的选择。例如:如果你只需要JPA实现,那么将EclipseLink导入到你的项目中,你就可以愉快地继续使用Tomcat。但是,如果您知道自己将大量使用JavaEE,或者您需要第三方插件无法提供的功能,那么请使用WildFly。结论总的来说,我建议坚持使用Tomcat,但如果您需要占用空间更小,请考虑使用Jetty。否则,如果您需要在项目中使用大量JavaEE支持,请使用WildFly。
