平時我們經常看到各種容器名稱:Servlet容器、WEB容器、JAVA WEB容器、Java EE容器等,還有各種服務器名稱:應用服務器、WEB服務器、WEB應用服務器、JavaWEB應用服務器、Java EE服務器等,這么多相似名稱,難以弄明白它們之間的區別與聯系。
1、容器與服務器的聯系
容器是位于應用程序/組件和服務器平臺之間的接口集合,使得應用程序/組件可以方便部署到服務器上運行。
2、各種容器的區別/聯系
2-1、容器(Containers)
容器通常理解就是裝東西的,我們這里說技術上的容器就是可以部署應用程序,并在上面運行的環境。
一般來說,它處理屏蔽了服務器平臺的復雜性,使得應用程序在它的基礎上可以方便快捷的部署;而對于應用程序來說,它就是位于應用程序和平臺之間的接口集合。
容器管理組件的生命周期,向應用程序組件分派請求,并提供與上下文數據(如關于當前請求的信息)的接口。
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應用服務器,處理動態請求的業務邏輯。