⑴ 各種容器和伺服器之間的區別和聯系
平時我們經常看到各種容器名稱:Servlet容器、WEB容器、Java WEB容器、Java EE容器等,還有各種伺服器名稱:應用伺服器、WEB伺服器、WEB應用伺服器、JavaWEB應用伺服器、Java EE伺服器等,這么多相似名稱,難以弄明白它們之間的區別與聯系。
下面我們嘗試從它們的定義中,區分它們,找出他們之間的聯系,最後通過Apache、nginx、tomcat等舉例說明容器以及伺服器的聯系。
如上圖,我們先來看下容器與伺服器的聯系:容器是位於應用程序/組件和伺服器平台之間的介面集合,使得應用程序/組件可以方便部署到伺服器上運行。
容器通常理解就是裝東西的,我們這里說技術上的容器就是 可以部署應用程序,並在上面運行的環境 。
一般來說,它處理屏蔽了伺服器平台的復雜性,使得應用程序在它的基礎上可以方便快捷的部署;而對於應用程序來說,它就是位於 應用程序和平台之間的介面集合 。
容器管理組件的生命周期,向應用程序組件分派請求,並提供與上下文數據(如關於當前請求的信息)的介面。
Servlet:屬於Java EE重要技術規范,構建了"接收請求--調用servlet程序處理--返回響應"基本模型。
Servlet程序:Java提供了開發Servlet程序的API,該API可以說Servlet容器的一部分,它對接應用程序與Servlet容器;
Servlet容器:就是實現了Servlet技術規范的部署環境,它可以部署運行Servlet程序。
WEB容器:可以部署多個WEB應用程序的環境。web容器給處於其中的應用程序組件(jsp,servlet)提供一個環境,使JSP,Servlet直接跟容器中的環境變數交互,不必關注其他系統問題。
Java WEB容器:實現了 Java EE規定的WEB應用技術規范 的部署環境。
Java EE WEB應用技術規范:Servlet、JSP(JavaServer Pages)、Java WebSocket等。
所以,完整的Java WEB容器包含Servlet容器。
伺服器是提供計算服務的設備。由於伺服器需要響應服務請求,並進行處理,因此一般來說伺服器應具備承擔服務並且保障服務的能力。
簡單來說,伺服器是 提供某些服務的設備 。
應用程序:是指為針對使用者的某種應用目的所編寫的軟體。
應用伺服器:就是運行應用程序,提供應用程序所實現服務的設備。
通常來說, 伺服器端的應用程序實現各種業務邏輯,應用伺服器通過各種協議把這些業務邏輯曝露給客戶端的程序 。它提供了訪問商業邏輯的途徑,以供客戶端應用程序使用。應用伺服器使用此業務邏輯就像調用對象的一個方法一樣。
WEB:現廣泛譯作網路、互聯網等技術領域。表現為三種形式,即超文本(hypertext)、超媒體(hypermedia)、超文本傳輸協議(HTTP)等。
WEB伺服器:或者叫 HTTP Server ,主要用於操作Http請求,包括接受客戶端的請求以及響應。它可以處理請求,也可以將請求轉發至其他伺服器。
簡單來說,WEB伺服器是提供網上信息瀏覽等WEB服務的設備。 Apache、Nginx、IIS是目前最主流的三個Web伺服器。可以用它們來構建WEB應用伺服器,通常它們發現一個請求是動態請求,就通過CGI、ISAPI、特殊管道等協議介面調用後面的應用伺服器來協同處理請求。如Nginx通過fastCGI模塊來調用ZendEngine執行PHP應用來處理PHP請求。
上面我們 把應用伺服器和WEB伺服器 嚴格區分:應用伺服器通過應用程序介面(通常是網路請求API)把業務邏輯暴露給客戶端應用程序。而WEB伺服器通過HTTP提供靜態內容給瀏覽器等客戶端。
如果不嚴格區分,應用伺服器包含WEB伺服器,因為WEB伺服器是WEB服務應用程序實現的。
WEB應用伺服器:結合應用伺服器和WEB伺服器,可以說,它是帶應用伺服器的Web伺服器,接收HTTP請求後,既能返回頁面等靜態內容,又能處理業務邏輯返回數據。
Tomcat、Jetty、WebLogic、Websphere、JBoss都是Java(EE) WEB應用伺服器。拿最常用的Tomcat來說,Tomcat是Java Servlet,JavaServerPages,Java Expression Language和JavaWebSocket(Java EE)技術的開源實現。
Java EE伺服器是實現Java EE技術規范,並提供標准Java EE服務的應用程序伺服器。
Java EE伺服器有時稱為應用伺服器,因為它們允許您向客戶端提供應用數據,就像Web伺服器向Web瀏覽器提供Web頁面一樣。
一個典型的JavaEE系統可以由兩部分構成首先是Web Server 用於處理靜態資源,然後是JavaEE Application Server 用於處理業務的動態資源。而這兩部分可以是單獨的伺服器例如Nginx+WebSphere也可以在一個伺服器上完成比如Tomcat(Tomcat即可以處理靜態資源又可以處理動態的Servlet)。
從概念上講:Web伺服器是提供WWW服務的程序;Web容器是提供給開發者的框架;Web應用程序伺服器內容豐富得多,既可用各廠商通常遵循一定的工業標准並自定義擴展功能而成,也可以利用開源組件輕量級拼裝打造。