轉自 https://cloud.tencent.com/developer/article/1490621
一: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 將響應返回給客戶端。
------------恢復內容結束------------