1. 程式人生 > >各種容器和服務器之間的區別和聯系

各種容器和服務器之間的區別和聯系

cat gin 接口調用 web服務 服務器 cgi ava ont nginx

平時我們經常看到各種容器名稱:Servlet容器、WEB容器、Java WEB容器、Java EE容器等,還有各種服務器名稱:應用服務器、WEB服務器、WEB應用服務器、JavaWEB應用服務器、Java EE服務器等,這麽多相似名稱,難以弄明白它們之間的區別與聯系。

下面我們嘗試從它們的定義中,區分它們,找出他們之間的聯系,最後通過Apache、nginx、tomcat等舉例說明容器以及服務器的聯系。

1、容器與服務器的聯系

技術分享圖片

如上圖,我們先來看下容器與服務器的聯系:容器是位於應用程序/組件和服務器平臺之間的接口集合,使得應用程序/組件可以方便部署到服務器上運行。

2、各種容器的區別/聯系

技術分享圖片

2-1、容器(Containers)

容器通常理解就是裝東西的,我們這裏說技術上的容器就是可以部署應用程序,並在上面運行的環境

一般來說,它處理屏蔽了服務器平臺的復雜性,使得應用程序在它的基礎上可以方便快捷的部署;而對於應用程序來說,它就是位於應用程序和平臺之間的接口集合

容器管理組件的生命周期,向應用程序組件分派請求,並提供與上下文數據(如關於當前請求的信息)的接口。

註意,容器技術虛擬化(如Docker 應用容器引擎)不在本文關註範圍內。

2-2、Servlet容器

Servlet:屬於Java EE重要技術規範,構建了"接收請求--調用servlet程序處理--返回響應"基本模型。

Servlet程序:Java提供了開發Servlet程序的API,該API可以說Servlet容器的一部分,它對接應用程序與Servlet容器;

Servlet容器:就是實現了Servlet技術規範的部署環境,它可以部署運行Servlet程序。

2-3、Java WEB容器

WEB容器:可以部署多個WEB應用程序的環境。

Java WEB容器:實現了Java EE規定的WEB應用技術規範的的部署環境。

Java EE WEB應用技術規範:Servlet、JSP(JavaServer Pages)、Java WebSocket等。

所以,完整的Java WEB容器包含Servlet容器。

2-4、Java EE容器

Java EE容器:實現了Java EE技術規範的部署環境。

Java EE技術規範:除了上面說的Servlet、JSP等Java EE WEB應用技術規範,還包括EJB(Enterprise JavaBeans)等許多技術規範。

所以,完整的Java EE容器包含Java WEB容器(Servlet容器)、EJB容器等。

3、各種服務器的區別/聯系

技術分享圖片

3-1、服務器(Server)

服務器是提供計算服務的設備。由於服務器需要響應服務請求,並進行處理,因此一般來說服務器應具備承擔服務並且保障服務的能力。

簡單來說,服務器是提供某些服務的設備

3-2、應用服務器

應用程序:是指為針對使用者的某種應用目的所編寫的軟件。

應用服務器:就是運行應用程序,提供應用程序所實現服務的設備

通常來說,服務器端的應用程序實現各種業務邏輯,應用服務器通過各種協議把這些業務邏輯曝露給客戶端的程序。它提供了訪問商業邏輯的途徑,以供客戶端應用程序使用。應用服務器使用此業務邏輯就像調用對象的一個方法一樣。

3-3、WEB服務器

WEB:現廣泛譯作網絡、互聯網等技術領域。表現為三種形式,即超文本(hypertext)、超媒體(hypermedia)、超文本傳輸協議(HTTP)等。

WEB服務器:一般指網站服務器,可以向瀏覽器等WEB客戶端提供文檔瀏覽、數據文件下載等WEB服務。

簡單來說,WEB服務器是提供網上信息瀏覽等WEB服務的設備

3-4、WEB應用服務器

上面我們把應用服務器和WEB服務器嚴格區分:應用服務器通過應用程序接口(通常是網絡請求API)把業務邏輯暴露給客戶端應用程序。而WEB服務器通過HTTP提供靜態內容給瀏覽器等客戶端。

如果不嚴格區分,應用服務器包含WEB服務器,因為WEB服務器是WEB服務應用程序實現的。

WEB應用服務器:結合應用服務器和WEB服務器,可以說,它是帶應用服務器的Web服務器,接收HTTP請求後,既能返回頁面等靜態內容,又能處理業務邏輯返回數據

3-5、Java EE服務器

Java EE服務器是實現Java EE技術規範,並提供標準Java EE服務的應用程序服務器。

Java EE服務器有時稱為應用服務器,因為它們允許您向客戶端提供應用數據,就像Web服務器向Web瀏覽器提供Web頁面一樣。

4、舉例說明容器以及服務器的聯系

4-1、Apache、Nginx、IIS

Apache、Nginx、IIS是目前最主流的三個Web服務器。

但是可以用它們來構建WEB應用服務器,通常它們發現一個請求是動態請求,就通過CGI、ISAPI、特殊管道等協議接口調用後面的應用服務器來協同處理請求。如Nginx通過fastCGI模塊來調用ZendEngine執行PHP應用來處理PHP請求。

4-2、Tomcat、Jetty、WebLogic、Websphere、JBoss

Tomcat、Jetty、WebLogic、Websphere、JBoss都是Java(EE) WEB應用服務器。

拿最常用的Tomcat來說,Tomcat是Java Servlet,JavaServerPages,Java Expression Language和JavaWebSocket(Java EE)技術的開源實現。

因為可以通過HTTP提供HTML頁面等靜態內容的請求訪問,所以是一個WEB服務器;

因為實現了Servlet規範,所以也是一個Servlet容器,可以運行Servlet程序;

因為可以通過Servlet容器,調用Servlet處理動態請求,所以也是一個應用服務器;

所以,可以說Tomcat是Java(EE) WEB應用服務器。

4-3、Nginx + Tomcat的WEB應用服務器(集群)

技術分享圖片

一般在實際應用中,先是通過Nginx反向代理服務器接收請求,匹配分離動態/靜態請求(動靜分離),如果是靜態請求,則轉發到另外的Nginx WEB服務器上,返回靜態內容;如果是動態請求,則轉發到後面的Tomcat應用服務器,處理動態請求的業務邏輯。

http://blog.csdn.net/lkforce/article/details/73649708

各種容器和服務器之間的區別和聯系