天天看點

【整理】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 技術先進、性能穩定且免費,是以深受 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 将響應傳回給用戶端。