web伺服器、Apache 和 tomcat 關係的理解
以一次JSP請求響應為例,講解伺服器,Apache、Tomcat之間的關係。
- 帶著這樣一個概念去看:Apache與Apache Tomcat(簡稱Tomcat)都是可以獨立執行的伺服器。你平時見到的
apache-tomcat-7.0.72
實際上只是Tomcat伺服器。此處整合了Apache和Apache Tomcat。Apache用來處理靜態資源,減少Tomcat的服務開銷。
先來個熱身
一個請求到發出到響應返回的全過程
-
首先,客戶端發出一個請求
看到瀏覽器上的URL地址了麼,那就是你的請求的主要內容。請求以一串文字的形式傳送,例如http://www.baidu.com
代表按照http協議獲取www.baidu.com
-
第二步,伺服器(硬體)收到這個請求,也就是那一串文字。
伺服器的概念之一就是一臺電腦。你提交的請求會被髮送到這臺電腦上。
顯然啊,伺服器就是一臺電腦,沒有軟體的話它是無法識別請求並做出響應的 -
第三步,伺服器(硬體)將請求交付給伺服器(軟體,例如Apache就是一個常用的伺服器軟體)。
假設請求的是一個動態頁面(動態頁面就是需要動態生成的頁面,例如QQ空間,每人每時每刻都不同,需要動態生成),在本例中是JSP,那麼apache則會將請求繼續轉給下一個部分 -
第四步,伺服器(軟體)將請求交給Tomcat
因為Apache本身不提供動態頁面訪問能力的,所以對jsp的支援要靠其他的東西來實現,這個東西類似於外掛(但嚴格來說Tomcat並不是Apache的一個外掛)。在本例中,這個外掛就是Tomcat。要注意:Tomcat本身也是可以單獨作為伺服器來執行的。Tomcat 有時也被稱為Apache Tomcat,這個Apache指的並不是Apache伺服器,而是一個“商標”,因為Tomcat是屬於Apache這個專案的
Tomcat是一個執行環境,或者叫容器。Tomcat負責例項化jsp並且處理請求(通俗的講就是“執行”jsp,搞到對應的響應資訊),並且返回一個響應到apache,apache則繼續將響應返回到客戶端。 -
至此,一個響應完成
熱身,again
以上內容說白了就是輸入和輸出,給定一個輸入,產生一個輸出。根據這個,我們來模擬下web的進化史。
- 最初,人們的需求很低,只要求能夠有靜態頁面就好了。
舉個例子,例如要做一個公告網頁,上面公示每天的重要通知。怎麼做呢?好辦啊!
我們用一個簡化的輸入輸出來表示,只要你輸入“公告”,我就輸出“2017-3-26 XXX寫下了第一篇關於幾個概念的理解的部落格”,不要想得太多,就是一個標準輸入,標準輸入。
用Java寫很簡單,寫成一個控制檯標準輸入輸出就好了。用偽程式碼表示如下,
-
if(輸入=“公告”) then
-
print “2017-3-26 XXX寫下了一篇關於幾個概念的理解的部落格”
- 1
- 2
這就是滿足了需求,就這麼簡單,然後將他改成網路IO就好了。
- 要是公告變了怎麼辦?好辦,將
print “2017-3-26 XXX寫下了第一篇關於幾個概念的理解的部落格”
該掉就好了。也就是說,只要資訊變動,你就要重寫訊息源,改動原始碼。很蠢是吧。這還好說,要是生成的像QQ空間那樣的頁面怎麼搞?好辦!套模板啊。一個頁面變動的只是少數,有很大一部分是不變的。想填空題一樣,將空填起來就好了,像這樣
-
date = "2017-3-26"
-
name = "一隻準程式設計師"
-
about = "幾個概念的理解"
-
if(輸入=“公告”) then
-
print date + name + “寫下了一篇關於" + about + "的部落格”
這幾個變數完全可以從資料庫中自動獲取。也就是說,只要更新資料庫,然後頁面就會自動更新了。雖然還是很蠢,但是動態頁面就是這個原理。
(你寫JSP不就是填空嗎,在模板上填空。${name}
這樣的不就是“空”嗎)
- 總結下,Apache負責請求轉發&&靜態頁面處理,Tomcat來處理動態頁面解析
現在,進入正題
概念闡述
藉助以上過程和概念,來談一談伺服器、Apache、Tomcat之間的關係
- 伺服器
經過以上過程,這個概念很熟了吧,有兩個主要概念- 硬體:一臺電腦。這臺電腦上執行著至少一個伺服器軟體,能夠處理請求
- 軟體:一個提供網頁的伺服器程式。處理請求並返回響應
- Apache
Apache就是一個伺服器(軟體),提供了靜態頁面的訪問能力。它配置上外掛(模組)後可以以各種語言實現動態頁面。(但是一定要注意Tomcat並不是Apache的外掛) - Tomcat
Apache Tomcat(即平時所說的Tomcat),也是一個伺服器。在這個案例中,Tomcat充當了一個外掛的作用,這個外掛是針對於Java的,或者說是jsp/servlet的。它是一個容器。何為容器?容器麼,就是容器。容的是什麼,JSP、Servlet。容器管理jsp、servlet的宣告週期,包括建立,執行,銷燬。它是一個jsp、servlet的執行環境。通俗點說,請求發過來,Tomcat負責執行JSP、Servlet,並返回結果。關於生命週期這東西,在此不做闡述。也就是說,沒有Tomcat,Apache是不認你JSP的。懂設計模式的可以想想了。。。當然,整個過程都有設計模式的影子
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伺服器