一、容器與服務器的聯繫瀏覽器
如上圖,咱們先來看下容器與服務器的聯繫:容器是位於應用程序/組件和服務器平臺之間的接口集合,使得應用程序/組件能夠方便部署到服務器上運行。服務器
二、各類容器的區別/聯繫網絡
2-一、容器(Containers)
容器一般理解就是裝東西的,咱們這裏說技術上的容器就是能夠部署應用程序,並在上面運行的環境。網站
通常來講,它處理屏蔽了服務器平臺的複雜性,使得應用程序在它的基礎上能夠方便快捷的部署;而對於應用程序來講,它就是位於應用程序和平臺之間的接口集合。.net
容器管理組件的生命週期,嚮應用程序組件分派請求,並提供與上下文數據(如關於當前請求的信息)的接口。3d
注意,容器技術虛擬化(如Docker 應用容器引擎)不在本文關注範圍內。代理
2-二、Servlet容器
Servlet:屬於Java EE重要技術規範,構建了"接收請求--調用servlet程序處理--返回響應"基本模型。對象
Servlet程序:Java提供了開發Servlet程序的API,該API能夠說Servlet容器的一部分,它對接應用程序與Servlet容器;blog
Servlet容器:就是實現了Servlet技術規範的部署環境,它能夠部署運行Servlet程序。接口
2-三、Java WEB容器
WEB容器:能夠部署多個WEB應用程序的環境。
Java WEB容器:實現了Java EE規定的WEB應用技術規範的的部署環境。
Java EE WEB應用技術規範:Servlet、JSP(JavaServer Pages)、Java WebSocket等。
因此,完整的Java WEB容器包含Servlet容器。
2-四、Java EE容器
Java EE容器:實現了Java EE技術規範的部署環境。
Java EE技術規範:除了上面說的Servlet、JSP等Java EE WEB應用技術規範,還包括EJB(Enterprise JavaBeans)等許多技術規範。
因此,完整的Java EE容器包含Java WEB容器(Servlet容器)、EJB容器等。
三、各類服務器的區別/聯繫
3-一、服務器(Server)
服務器是提供計算服務的設備。因爲服務器須要響應服務請求,並進行處理,所以通常來講服務器應具有承擔服務而且保障服務的能力。
簡單來講,服務器是提供某些服務的設備。
3-二、應用服務器
應用程序:是指爲針對使用者的某種應用目的所編寫的軟件。
應用服務器:就是運行應用程序,提供應用程序所實現服務的設備。
一般來講,服務器端的應用程序實現各類業務邏輯,應用服務器經過各類協議把這些業務邏輯曝露給客戶端的程序。它提供了訪問商業邏輯的途徑,以供客戶端應用程序使用。應用服務器使用此業務邏輯就像調用對象的一個方法同樣。
3-三、WEB服務器
WEB:現普遍譯做網絡、互聯網等技術領域。表現爲三種形式,即超文本(hypertext)、超媒體(hypermedia)、超文本傳輸協議(HTTP)等。
WEB服務器:通常指網站服務器,能夠向瀏覽器等WEB客戶端提供文檔瀏覽、數據文件下載等WEB服務。
簡單來講,WEB服務器是提供網上信息瀏覽等WEB服務的設備。
3-四、WEB應用服務器
上面咱們把應用服務器和WEB服務器嚴格區分:應用服務器經過應用程序接口(一般是網絡請求API)把業務邏輯暴露給客戶端應用程序。而WEB服務器經過HTTP提供靜態內容給瀏覽器等客戶端。
若是不嚴格區分,應用服務器包含WEB服務器,由於WEB服務器是WEB服務應用程序實現的。
WEB應用服務器:結合應用服務器和WEB服務器,能夠說,它是帶應用服務器的Web服務器,接收HTTP請求後,既能返回頁面等靜態內容,又能處理業務邏輯返回數據。
3-五、Java EE服務器
Java EE服務器是實現Java EE技術規範,並提供標準Java EE服務的應用程序服務器。
Java EE服務器有時稱爲應用服務器,由於它們容許您向客戶端提供應用數據,就像Web服務器向Web瀏覽器提供Web頁面同樣。
四、舉例說明容器以及服務器的聯繫
4-一、Apache、Nginx、IIS
Apache、Nginx、IIS是目前最主流的三個Web服務器。
可是能夠用它們來構建WEB應用服務器,一般它們發現一個請求是動態請求,就經過CGI、ISAPI、特殊管道等協議接口調用後面的應用服務器來協同處理請求。如Nginx經過fastCGI模塊來調用ZendEngine執行PHP應用來處理PHP請求。
4-二、Tomcat、Jetty、WebLogic、Websphere、JBoss
Tomcat、Jetty、WebLogic、Websphere、JBoss都是Java(EE) WEB應用服務器。
拿最經常使用的Tomcat來講,Tomcat是Java Servlet,JavaServer Pages,Java Expression Language和Java WebSocket(Java EE)技術的開源實現。
由於能夠經過HTTP提供HTML頁面等靜態內容的請求訪問,因此是一個WEB服務器;
由於實現了Servlet規範,因此也是一個Servlet容器,能夠運行Servlet程序;
由於能夠經過Servlet容器,調用Servlet處理動態請求,因此也是一個應用服務器;
因此,能夠說Tomcat是Java(EE) WEB應用服務器。
4-三、Nginx + Tomcat的WEB應用服務器(集羣)
通常在實際應用中,先是經過Nginx反向代理服務器接收請求,匹配分離動態/靜態請求(動靜分離),若是是靜態請求,則轉發到另外的Nginx WEB服務器上,返回靜態內容;若是是動態請求,則轉發到後面的Tomcat應用服務器,處理動態請求的業務邏輯。
原文:https://blog.csdn.net/tjiyu/article/details/53148174