Tomcat vs. Jetty vs. GlassFish vs. WildFly
如果要編寫Java Web應(yīng)用程序,首先需要做的是做出一個困難的決定, 我們該選擇哪種服務(wù)器來運行Java應(yīng)用程序呢?這是一個艱難的選擇,因為那里有許多優(yōu)秀的選擇,它們之間的差異并不總是顯而易見的。
首先回顧下什么是應(yīng)用程序服務(wù)器?一般來說,應(yīng)用服務(wù)器執(zhí)行Java應(yīng)用程序。您可以在操作系統(tǒng)中啟動它們,然后將應(yīng)用程序部署到它們中。將應(yīng)用程序服務(wù)器視為運行Java代碼并使其正常運行的容器。此外,應(yīng)用程序服務(wù)器還提供了一些可在您自己的代碼中使用的通用基礎(chǔ)結(jié)構(gòu)和功能。
在本文中,我將介紹免費和開源Java應(yīng)用程序服務(wù)器之間的高級別比較。
Tomcat
Tomcat是Apache Software Foundation開發(fā)的與Java Web應(yīng)用程序一起使用的應(yīng)用程序服務(wù)器。Tomcat的市場份額占到了所有Java應(yīng)用服務(wù)器部署的60%。
然而,關(guān)于Tomcat作為應(yīng)用服務(wù)器的優(yōu)點,存在一些混淆(甚至是爭議)。在技術(shù)上稱它為應(yīng)用服務(wù)器……事實并非如此。
讓我解釋。還記得當我說應(yīng)用服務(wù)器為你的應(yīng)用程序提供一些基礎(chǔ)設(shè)施和功能嗎?嗯,這套功能并不是隨意的。稱為Java EE的規(guī)范精確定義了應(yīng)用程序服務(wù)器的功能。因此,嚴格地說,我應(yīng)該只調(diào)用名稱應(yīng)用程序服務(wù)器通過Java EE兼容性測試的容器。截至今天,Oracle也列出了三個這樣的容器。
Oracle已將Java EE轉(zhuǎn)移到Eclipse Foundation,現(xiàn)在它在Java EE 8之后被稱為Jakarta EE。此外,現(xiàn)在還有一個完整EE平臺的Web Profile子集,以及一個僅支持servlet的Web容器。
實際上,Tomcat沒有實現(xiàn)Java EE應(yīng)用程序服務(wù)器所需的所有功能。Tomcat的準確標題是“web服務(wù)器”或“servlet容器”。但即使Tomcat不支持開箱即用的某些Java EE功能,您仍然可以使用大多數(shù)這些功能。您只需將它們作為應(yīng)用程序中的其他第三方依賴項包含在內(nèi)。
因此,Tomcat是成熟的,文檔齊全的,也是使用最廣泛的Java應(yīng)用程序服務(wù)器。憑借良好的文檔以及在互聯(lián)網(wǎng)上關(guān)于它的教程,Tomcat幾乎在所有Java Web應(yīng)用程序中都是應(yīng)用服務(wù)器中最有利的競爭者。
Jetty
Jetty 是另一個應(yīng)用程序服務(wù)器(由Eclipse Foundation開發(fā)),從技術(shù)上講,它不是一個功能齊全的Java EE容器。就像Tomcat一樣,它缺乏對許多Java EE功能的支持。就像Tomcat一樣,您仍然可以通過添加其他第三方依賴項來使用大多數(shù)功能。
雖然Jetty的市場份額遠不及Tomcat的市場份額,但它仍然廣泛應(yīng)用于行業(yè)。它的兩個主要賣點是緊湊和占地面積小。兩者都使Jetty非常適合受限環(huán)境和嵌入其他產(chǎn)品。
GlassFish
GlassFish是由Oracle開發(fā)的功能齊全且經(jīng)過認證的Java EE應(yīng)用服務(wù)器。因此,GlassFish比Tomcat或Jetty更重量級,并且可以說,操作起來有點困難。
事實上,GlassFish不僅僅是一個通用的Java EE應(yīng)用服務(wù)器。它是Java EE標準的參考實現(xiàn)。這意味著GlassFish用于展示Java EE功能,它得到了定義Java EE標準的貢獻。因此,GlassFish將始終首先支持最新的Java EE功能。這是一個加分項。
GlassFish的缺點是缺乏商業(yè)支持。是的,這篇文章是關(guān)于免費和開源應(yīng)用服務(wù)器的,但這仍然是一個重點。隨著項目的發(fā)展和財務(wù)上的成功,您可能愿意為應(yīng)用程序服務(wù)器獲得長期支持,安全更新,客戶支持等。這就是商業(yè)支持所提供的,許多公司都會購買它。因此請記住,如果您將來使用GlassFish并需要商業(yè)支持,則需要遷移到完全不同的應(yīng)用程序服務(wù)器。
WildFly
WildFly,以前稱為JBoss Application Server,由紅帽 (Red Hat)開發(fā),是另一個功能齊全且經(jīng)過認證的應(yīng)用服務(wù)器。
WildFly相對于GlassFish的最大優(yōu)勢是Red Hat提供了從WildFly到其商業(yè)支持的應(yīng)用服務(wù)器JBoss企業(yè)應(yīng)用程序平臺的簡單遷移路徑。這意味著您可以立即使用WildFly,并在將來快速遷移到JBoss EAP,以獲得商業(yè)支持,如果您確定需要的話。
我們該如何選擇應(yīng)用程序服務(wù)器
這是一個細致入微的問題。說實話,答案因項目而異。
如果您不需要Java EE功能(例如,您將使用Spring Framework),那么我會說使用Tomcat。這是事實上的行業(yè)標準,因此,如果您選擇它,您將有最簡單的時間查找文檔和示例。但是,如果您已經(jīng)知道將在受限環(huán)境中運行應(yīng)用程序,請考慮選擇Jetty,因為它占用空間較小。
如果您計劃編寫Java EE應(yīng)用程序,那么事情會變得更加細微。
正如我已經(jīng)說過的,可以通過包含第三方依賴項來使用Tomcat來運行Java EE應(yīng)用程序。因此,如果您知道只使用一小部分Java EE,那么Tomcat仍然是一個不錯的選擇。例如:如果您只需要JPA實現(xiàn),那么將EclipseLink導(dǎo)入到您的項目中就可以了,您可以愉快地繼續(xù)使用Tomcat。但是,如果您知道您將大量使用Java EE,或者您需要的功能不能作為第三方插件使用,那么請使用WildFly。
結(jié)論
總的來說,我建議支持Tomcat,但如果你需要更小的足跡,可以考慮Jetty。否則,如果您需要在項目中使用大量Java EE支持,請使用WildFly。