WEB 容器、WEB服務和應用伺服器的區別與聯絡

BruceZhang發表於2015-11-20

【web 容器】

何為容器:
容器是一種服務呼叫規範框架,J2EE 大量運用了容器和元件技術來構建分層的企業級應用。在 J2EE 規範中,相應的有 WEB Container 和 EJB Container 等。

  WEB 容器給處於其中的應用程式元件(JSP,SERVLET)提供一個環境,使 JSP,SERVLET 直接跟容器中的環境變數互動,不必關注其它系統問題(從這個角度來說,web 容器應該屬於架構上的概念)。web 容器 主要由 WEB 伺服器來實現。例如:TOMCAT,WEBLOGIC,WEBSPHERE 等。 
  若容器提供的介面嚴格遵守 J2EE 規範中的 WEB APPLICATION 標準。我們把該容器叫做 J2EE 中的 WEB 容器。 

WEB 容器更多的是跟基於 HTTP 的請求打交道。而 EJB 容器不是。它是更多的跟資料庫、其它服務打交道。

  容器的行為是 將其內部的應用程式元件與外界的通訊協議互動進行了隔離,從而減輕內部應用程式元件的負擔(實現方面的負擔?)。 例如,SERVLET 不用關心 HTTP 的細節,而是直接引用環境變數 session、request、response 就行、EJB 不用關心資料庫連線速度、各種事務控制,直接由容器來完成。 

【Web伺服器】

  Web 伺服器(Web Server)可以處理 HTTP 協議。當 Web 伺服器接收到一個 HTTP 請求,會返回一個 HTTP 響應,例如送回一個 HTML 頁面。 

  Web 伺服器可以響應針對靜態頁面或圖片的請求, 進行頁面跳轉(redirect),或者把動態響應(dynamic response)的產生委託(delegate)給一些其它的程式,例如 CGI 指令碼,JSP(JavaServer Pages)指令碼,servlets,ASP(Active Server Pages)指令碼,伺服器端 JavaScript,或者一些其它的伺服器端技術。 

Web 伺服器僅僅提供一個可以執行伺服器端程式和返回(程式所產生的)響應的環境,而不會超出職能範圍。
Web 伺服器主要是處理需要向瀏覽器傳送 HTML 的請求以供瀏覽。

【應用程式伺服器(The Application Server)】

  根據定義,作為應用程式伺服器,要求可以通過各種協議(包括 HTTP 協議)把商業邏輯暴露給(expose)客戶端應用程式。應用程式使用此商業邏輯就像你呼叫物件的一個方法或過程(語言中的一個函式)一樣。 

【serverlet】

  Servlet(Server Applet),全稱 Java Servlet,未有中文譯文。是用 Java 編寫的伺服器端程式。其主要功能在於互動式地瀏覽和修改資料,生成動態 Web 內容。狹義的 Servlet 是指 Java 語言實現的一個介面,廣義的 Servlet 是指任何實現了這個 Servlet 介面的類,一般情況下,人們將 Servlet 理解為後者。 

  Servlet 執行於支援 Java 的應用伺服器中。從實現上講,Servlet 可以響應任何型別的請求,但絕大多數情況下 Servlet 只用來擴充套件基於 HTTP 協議的 Web 伺服器。

【Tomcat】

  Tomcat 伺服器是一個免費的開放原始碼的 Web 應用伺服器,屬於輕量級應用伺服器,在中小型系統和併發訪問使用者不是很多的場合下被普遍使用,是開發和除錯 JSP 程式的首選。對於一個初學者來說,可以這樣認為,當在一臺機器上配置好 Apache 伺服器,可利用它響應對 HTML 頁面的訪問請求。實際上 Tomcat 部分是Apache 伺服器的擴充套件,但它是獨立執行的,所以當你執行 tomcat 時,它實際上作為一個與 Apache 獨立的程式單獨執行的。 

Apache Tomcat is an open source software implementation of the Java Servlet and JavaServer Pages technologies.

【Tomcat與Web伺服器、應用伺服器的關係】

  Tomcat 伺服器是一個免費的開放原始碼的 Web 應用伺服器。因為 Tomcat 技術先進、效能穩定且免費,所以深受 Java 愛好者的喜愛並得到了部分軟體開發商的認可,成為目前比較流行的 Web 應用伺服器。 

一、Tomcat 與應用伺服器

  到目前為止,Tomcat 一直被認為是 Servlet/JSP API 的執行器,也就所謂的 Servlet 容器。然而,Tomcat並不僅僅如此,它還提供了 JNDI 和 JMX API 的實現機制。儘管如此,Tomcat 仍然還不能算是應用伺服器,因為它不提供大多數 J2EE API 的支援。 

  很有意思的是,目前許多的應用伺服器通常把 Tomcat 作為它們 Servlet 和 JSP API 的容器。由於 Tomcat允許開發者只需通過加入一行致謝,就可以把 Tomcat 嵌入到它們的應用中。遺憾的是,許多商業應用伺服器並沒有遵守此規則。 

  對於開發者來說,如果是為了尋找利用 Servlet、JSP、JNDI 和 JMX 技術來生成 Java Web 應用的話,選擇Tomcat 是一個優秀的解決方案;但是為了尋找支援其他的 J2EE API,那麼尋找一個應用伺服器或者把 Tomcat作為應用伺服器的輔助,將是一個不錯的解決方案;第三種方式是找到獨立的 J2EE API 實現,然後把它們跟Tomcat 結合起來使用。雖然整合會帶來相關的問題,但是這種方式是最為有效的。 

二、Tomcat 與 Web 伺服器

  Tomcat 是提供一個支援 Servlet 和 JSP 執行的容器。Servlet 和 JSP 能根據實時需要,產生動態網頁內容。而對於 Web 伺服器來說, Apache 僅僅支援靜態網頁,對於支援動態網頁就會顯得無能為力;Tomcat 則既能為動態網頁服務,同時也能為靜態網頁提供支援。儘管它沒有通常的 Web 伺服器快、功能也不如 Web 伺服器豐富,但是 Tomcat 逐漸為支援靜態內容不斷擴充。大多數的 Web 伺服器都是用底層語言編寫如 C,利用了相應平臺的特徵,因此用純 Java 編寫的 Tomcat 執行速度不可能與它們相提並論。 

  一般來說,大的站點都是將 Tomcat 與 Apache 的結合,Apache 負責接受所有來自客戶端的 HTTP 請求,然後將 Servlets 和 JSP 的請求轉發給 Tomcat 來處理。Tomcat 完成處理後,將響應傳回給 Apache,最後 Apache 將響應返回給客戶端。 

相關文章