【整理】WEB 容器、WEB服務和應用服務器的區別與聯繫
對於一個不瞭解 WEB 開發的人來講,下面的概念是爲了免於被別人鄙視和忽悠的~~
【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 應用服務器。
1、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 結合起來使用。雖然整合會帶來相關的問題,可是這種方式是最爲有效的。
2、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 將響應返回給客戶端。
歡迎關注本站公眾號,獲取更多信息