Tomcat vs. Jetty vs. GlassFish vs. WildFly
如果要編寫Java Web應用程序,首先需要做的是做出一個困難的決定, 我們該選擇哪種服務器來運行Java應用程序呢?這是一個艱難的選擇,因為那里有許多優秀的選擇,它們之間的差異并不總是顯而易見的。
首先回顧下什么是應用程序服務器?一般來說,應用服務器執行Java應用程序。您可以在操作系統中啟動它們,然后將應用程序部署到它們中。將應用程序服務器視為運行Java代碼并使其正常運行的容器。此外,應用程序服務器還提供了一些可在您自己的代碼中使用的通用基礎結構和功能。
在本文中,我將介紹免費和開源Java應用程序服務器之間的高級別比較。
Tomcat
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
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,以獲得商業支持,如果您確定需要的話。
我們該如何選擇應用程序服務器
這是一個細致入微的問題。說實話,答案因項目而異。
如果您不需要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。