1. 程式人生 > >一文總結應用、Web、HTTP伺服器,Apache、Nginx,Tomcat、IIS、JBoss、Glassfish等區別

一文總結應用、Web、HTTP伺服器,Apache、Nginx,Tomcat、IIS、JBoss、Glassfish等區別

一個學習的總結,或者說是彙總,有些連結給出的觀點過時,已按照自己的理解經過修改編輯;

應用、Web、HTTP伺服器

這篇文章講述典型的Web伺服器的工作原理。
Web伺服器和應用伺服器有什麼區別?EAR和WAR部署包之間的不同?
參考stackoverflow這個問題。在大多數情況下,Web伺服器和應用伺服器基本等價的。Tomcat(多被認為是Web伺服器)怎麼會有能力去執行企業級的應用程式。這樣的話,Tomcat到底是Web伺服器還是應用伺服器?
類比於JPA和Hibernates,那麼區分Web伺服器和應用伺服器就會變得非常簡單。stackoverflow另一個問題
JavaEE規範,就是一套規則,定義一些介面。任何一個JavaEE伺服器都需要服從這些規範,並實現這些介面。

這裡有“官方認證”的JavaEE伺服器的清單。如果你把你的企業級應用程式(就是指使用到JPA,EJB或者其他JavaEE元件功能的應用程式)部署到一個符合JavaEE規範的伺服器上,那麼真正的應用伺服器本身是不需要你的部署包包含對JavaEE元件進行實現的類庫的。如果部署的時候你必須要通過自己的應用程式中自帶jar檔案來支援這些JavaEE元件,那你用的就是Web伺服器,就像是Tomcat。

如果你在你的程式裡使用JPA,然後你打算把程式部署到JBoss AS7伺服器上,你的程式本身是不需要包含支援JPA實現的jar包的。但是如果你想把程式部署到Tomcat伺服器上,你就必須要把實現JPA功能的jar包放到你的lib庫中,然後再一起部署過去。這就是為什麼JBoss AS7是應用伺服器而Tomcat是Web伺服器的原因。另一個關鍵的區別是,Tomcat上不能部署EAR檔案,而只能部署WAR檔案。

Apache & Tomcat

解析一 :
apache支援靜態頁,tomcat支援動態的,比如servlet等,
一般使用apache+tomcat的話,apache只是作為一個轉發,對jsp的處理是由tomcat來處理的。
apche可以支援phpcgiperl,但是要使用java的話,你需要tomcat在apache後臺支撐,將java請求由apache轉發給tomcat處理。
apache是web伺服器,tomcat是應用(java)伺服器,它只是一個servlet(jsp也翻譯成servlet)容器,可以認為是apache的擴充套件,但是可以獨立於apache執行。
兩者都有HTTP服務的功能
不同點:
Apache是專門提供HTTP服務的,以及相關配置的(例如虛擬主機、URL轉發等等)
Tomcat是Apache組織在符合J2EE的JSP、Servlet標準下開發的一個JSP伺服器

解析二:
APACHE是一個web伺服器環境程式,啟用他可以作為web伺服器使用,不過只支援靜態網頁 如(asp,php,cgi,jsp)等動態網頁的就不行;
如果要在APACHE環境下執行jsp的話就需要一個直譯器來執行jsp網頁,而這個jsp直譯器就是TOMCAT, 為什麼還要JDK呢?因為jsp需要連線資料庫的話,就要jdk來提供連線資料庫的驅程,所以要執行jsp的web伺服器平臺就需要APACHE+TOMCAT+JDK

整合的好處是:
如果客戶端請求的是靜態頁面,則只需要Apache伺服器響應請求;
如果客戶端請求動態頁面,則是Tomcat伺服器響應請求;
因為jsp是伺服器端解釋程式碼的,這樣整合就可以減少Tomcat的服務開銷;

解析三:
apache:側重於http server
tomcat:側重於servlet引擎,如果以standalone方式執行,功能上與apache等效 , 支援JSP,但對靜態網頁不太理想;

apache是web伺服器,tomcat是java應用伺服器,servlet容器,可以認為是apache的擴充套件,但是可以獨立於apache執行。

JBoss vs. Glassfish

如果是企業級的複雜應用,無論從穩定性,成熟度,還是從產品的完整性來看,JBoss無疑是比較好的選擇。
GlassFish的閃光點在熱部署,支援OSGI,而且核心變的很小,啟動速度非常快。

Glassfish 和 JBoss 都是 J2EE 應用伺服器,都可以作為 EJB 容器來執行 EJB 的。
Glassfish 是 Java EE 的參考實現(是Oracle家產品),Java EE 最新的版本都能在 Glassfish 中得到體現。
個人感覺 Glassfish 比 JBoss 好,光那個 Administrator 的管理介面就比 JBoss 的漂亮。

JBoss實現所有j2ee的規範和api,它的優勢在於具有良好的價效比,支援的標準新,版本快,有開放原始碼的所有優點,支援熱部署。
可以在開發階段採用GlassFish,真實執行環境採用JBoss。

現在流行的Java EE容器有很多:Tomcat、JBoss、Resin、Glassfish等。
  1. Tomcat是Apache鼎力支援的Java Web應用伺服器(servlet容器),由於它優秀的穩定性以及豐富的文件資料,廣泛的使用人群,從而在開源領域受到最廣泛的青睞。
  2. Jboss作為Java EE應用伺服器,它不但是Servlet容器,而且是EJB容器,從而受到企業級開發人員的歡迎,彌補Tomcat只是一個Servlet容器的缺憾。
  3. Resin也僅僅是一個Servlet容器,然而由於它優秀的執行速度,使得它在輕量級Java Web領域備受喜愛,特別是在網際網路Web服務領域。
  在商用應用伺服器裡主要有:Weblogic、Websphere,然而就在同等條件下,Weblogic在效能及易用性等方面,要比Tomcat優秀很多。
  4.glassfish是Sun公司推出的Java EE伺服器(Java EE容器),一個比較活躍的開源社群,不斷的通過社群的反饋來提高其的可用性,經過glassfish v1 glassfish v2 到今天的glassfish v3 ,它已經走向成熟。Glassfish是一個免費、開放原始碼的應用服務,實現Java EE 5平臺包括以下最新技術:EJB 3.0、JSF 1.2、Servlet 2.5、JSP 2.1、JAX-WS 2.0、JAXB 2.0、 Java Persistence 1.0、Common Annonations 1.0、StAX 1.0等。
  支援叢集,通過記憶體中會話狀態複製,增強部署體系結構的可用性與可伸縮性,它對叢集有著很好的支援,可以簡單到通過新增機器,就可輕鬆的提高網站的帶負載能力,在解析能力方面,它對html的吞吐能力與apache伺服器不分上下,就是tomcat所不能比的,支援目錄部署,熱部署,解決 tomcat對熱部署能力的缺陷。在版本方面做的更加人性化,有開發時用的簡化版,專門用於部署web專案的版本,還要完全符合j2ee標準的版本。

其他學習資料

參考