Web容器Web伺服器及常見的Web容器有哪些?
一、引言
首先來理解一下簡單的一個請求傳送到響應的過程。
- 首先,客戶端,通常是瀏覽器或者一些應用傳送請求到你的伺服器地址,比如訪問你的Url或者其他的東西。而我們的伺服器通常要分為兩個部分,一部分是伺服器硬體,有了硬體之後還有有硬體上對應執行的軟體。即伺服器軟體
- 其次,伺服器的硬體部分接收到了這一段請求,將其遞交給對應的程序,伺服器軟體。此時這個伺服器軟體即為Web伺服器,比如說Apache。
- 再然後,這些Web伺服器伺服器本身不一定提供動態頁面的訪問能力,所以對jsp或者一些其他的訪問需要其他的東西來輔助實現,這個東西類似於外掛(客觀來講Tomcat不是Apache的一個外掛,在這裡暫且理解為外掛)。在本例中,這個外掛就是Tomcat。
- Tomcat是一個執行環境,或者叫容器。Tomcat負責例項化jsp並且處理請求(通俗的講就是“執行”jsp,搞到對應的響應資訊),並且返回一個響應到apache,apache再排程硬體資源,則繼續將響應返回到客戶端。
- 至此,一個響應完成。
二、定義
伺服器
硬體角度上說就是一臺高效能的Computer。我們通常指的伺服器其實應該是裝有能夠處理具體請求事務的伺服器軟體的Computer。比如最常見的www伺服器、mail伺服器、計費伺服器、ftp伺服器等等。很多時候人們常把諸如Tomcat、IIS、Weblogic 也稱之為web伺服器,其實這些只是用於開發、整合、部署和管理Web應用、網路應用和資料庫應用的應用伺服器軟體。
Web伺服器
web伺服器可以處理Http協議,當web伺服器接受到一個Http請求,會返回一個Http響應,例如送回一個HtMl頁面。
web伺服器可以響應針對靜態頁面或者圖片的請求,進行頁面跳轉(redirect),或者把動態響應(dynamic response)的產生委託(delegate)給一些其它的程式,例如 CGI 指令碼,JSP(JavaServer Pages)指令碼,servlets,ASP(Active Server Pages)指令碼,伺服器端 JavaScript,或者一些其它的伺服器端技術。
web伺服器僅僅提供一個可以執行伺服器端程式和返回(程式產生)響應的環境,而不會超出職能範圍
web伺服器主要是處理需要向瀏覽器傳送Html的請求以供瀏覽
Web伺服器也可以叫做應用伺服器。它的功能比web容器要強大的多,因為它可以部署EJB應用,可以實現容器管理的事務,一般的應用伺服器有weblogic和websphere等,它們都是商業伺服器,功能強大但都是收費的。
Web應用程式需要部署到Web容器或者Web伺服器中才能執行,兩者都必須符合J2EE規範。
Web容器
web容器就是一種服務程式,在伺服器中一個埠就對應一個提供相應服務的程式(比如Apache預設的埠為80),給處於其中的應用程式元件提供環境,使其直接跟容器中的環境變數互動,不必關注其它系統問題。而這個程式就是處理伺服器從客戶端收到的請求,如Java中的Tomcat容器,ASP的IIS都是這樣的容器。這些容器相容了Web伺服器軟體的一些功能。一個伺服器可以有多個容器。
如果web伺服器應用得到一個指向servlet的請求(而不是其他請求,如請求一個普通的靜態HTML),此時伺服器不是把這個請求交給servlet本身,而是交給部署該servlet的容器,要由容器呼叫servlet的方法,如doPost()或doGet()。
筆者在網上搜到的這些概念,很多時候也都混淆不清。容器和伺服器有時候的定義也比較模糊,容器兼有了伺服器的職責和能力。
容器中,中小型的Tomcat,Nginx大型的,JBoss、Weblogic、WebSphere等
應用程式伺服器 The Application Servlet
根據定義,作為應用程式伺服器,要求可以通過各種協議包括Http協議把商業邏輯暴露給expose客戶端應用程式,應用程式使用此商業邏輯就像你呼叫物件的一個方法或過程一樣。
Servlet(Server Applet),全稱 Java Servlet,未有中文譯文。是用 Java 編寫的伺服器端程式。其主要功能在於互動式地瀏覽和修改資料,生成動態 Web 內容。狹義的 Servlet 是指 Java 語言實現的一個介面,廣義的 Servlet 是指任何實現了這個 Servlet 介面的類,一般情況下,人們將 Servlet 理解為後者。
Servlet 運行於支援 Java 的應用伺服器中。從實現上講,Servlet 可以響應任何型別的請求,但絕大多數情況下 Servlet 只用來擴充套件基於 HTTP 協議的 Web 伺服器。
Apache
Apache就是一個伺服器(軟體),提供了靜態頁面的訪問能力。它配置上外掛(模組)後可以以各種語言實現動態頁面。(但是一定要注意Tomcat並不是Apache的外掛)
Tomcat
Apache Tomcat(即平時所說的Tomcat),也是一個伺服器。在這個案例中,Tomcat充當了一個外掛的作用,這個外掛是針對於Java的,或者說是jsp/servlet的。它是一個容器。何為容器?容器麼,就是容器。容的是什麼,JSP、Servlet。容器管理jsp、servlet的宣告週期,包括建立,執行,銷燬。它是一個jsp、servlet的執行環境。通俗點說,請求發過來,Tomcat負責執行JSP、Servlet,並返回結果。關於生命週期這東西,在此不做闡述。也就是說,沒有Tomcat,Apache是不認你JSP的。懂設計模式的可以想想了。。。當然,整個過程都有設計模式的影子
要注意:Tomcat本身也是可以單獨作為伺服器來執行的。Tomcat 有時也被稱為Apache Tomcat,這個Apache指的並不是Apache伺服器,而是一個“商標”,因為Tomcat是屬於Apache這個專案的
Apache與Tomcat比較聯絡
apache支援靜態頁,tomcat支援動態的,比如servlet等。
一般使用apache+tomcat的話,apache只是作為一個轉發,對jsp的處理是由tomcat來處理的。
apache可以支援php\cgi\perl,但是要使用java的話,你需要tomcat在apache後臺支撐,將java請求由apache轉發給tomcat處理。
apache是web伺服器,Tomcat是應用(java)伺服器,它只是一個servlet(jsp也翻譯成servlet)容器,可以認為是apache的擴充套件,但是可以獨立於apache執行。
共同點
兩者都是apache組織開發的
兩者都有HTTP服務的功能
兩者都是免費的
不同點:
Apache是專門用了提供HTTP服務的,以及相關配置的(例如虛擬主機、URL轉發等等)
Tomcat是Apache組織在符合J2EE的JSP、Servlet標準下開發的一個JSP伺服器