tomcat 綜述

Web 容器: 早期的web應(yīng)用主要是瀏覽靜態(tài)頁面耕突,想Apache, Nginx 都是向瀏覽器返回html文件喳资,然后瀏覽器解析并展示html文件。
后來隨著網(wǎng)絡(luò)的發(fā)展两曼,人們希望可以有更多的交互澳窑,即希望服務(wù)器不是簡單的返回一個html,而是可以根據(jù)用于的輸入斧散,動態(tài)的生成html來和用戶交互,所以這時我們就需要在服務(wù)器端再部署一下java程序來和用戶交互摊聋,這些程序就是servlet鸡捐,但是servlet 沒有main函數(shù),不能獨立運行麻裁,需要servlet容器來對他們進(jìn)行調(diào)度箍镜,所以就有了servlet容器。 像tomcat, jetty其實就是 HTTP服務(wù)器+ servlet容器
Apache是一個HTTP服務(wù)器煎源,而Tomcat或者Jetty是一個HTTP服務(wù)器+Servlet容器色迂。HTTP服務(wù)器與Servlet容器的功能界限是:你可以把HTTP服務(wù)器想象成前臺的接待,負(fù)責(zé)網(wǎng)絡(luò)通信和解析請求手销,而Servlet容器是業(yè)務(wù)部門歇僧,負(fù)責(zé)處理業(yè)務(wù)請求。
如下圖所示锋拖,HTTP服務(wù)器诈悍,負(fù)責(zé)獲取客戶端請求,然后將請求解析并發(fā)送給Servlet服務(wù)器兽埃,servlet容器決定具體調(diào)用那個servlet來執(zhí)行該請求侥钳。servlet怎么知道調(diào)用那個類的那個方法來處理請求呢?怎么知道每個方法的名字是啥讲仰,參數(shù)是啥呢慕趴? 很現(xiàn)實servlet容器和servlet之間必須有個接口來統(tǒng)一調(diào)度,這個接口就是servlet接口鄙陡。


image.png

servlet接口如下

public interface Servlet {
    void init(ServletConfig config) throws ServletException;
    
    ServletConfig getServletConfig();
    
    void service(ServletRequest req, ServletResponse res)throws ServletException, IOException;
    
    String getServletInfo();
    
    void destroy();
}

其中的init 方法可以在啟動servlet的時候初始化一些資源冕房; destroy則是在servlet銷毀時釋放一些資源。
getServletConfig則指夾在我們在web.xml中配置的一些參數(shù)趁矾。
service則是實現(xiàn)具體業(yè)務(wù)邏輯的地方耙册。
有接口通常就會有一個抽象類來實現(xiàn)一些通用邏輯,這里的抽象類則是GenericServlet. 雖然servlet并不在意請求時通過什么協(xié)議傳過來的毫捣,結(jié)果需要使用什么協(xié)議傳出去详拙,但是通常都是基于HTTP協(xié)議,所以為了方便使用這里還是實現(xiàn)了HTTPServlet,以加入http特性蔓同,我們?nèi)闇弦獙崿F(xiàn)http相關(guān)的servlet可以直接繼承該子類饶辙,然后重新doGet, doPost即可,大大簡化了我們編程斑粱。
下面我們再來看一下請求處理過程:
HTTP服務(wù)器拿到客戶端請求之后將其解析打包成一個ServletRequest,然后調(diào)用Servlet的service方法弃揽,將請求傳遞給Servlet容器, Servelt容器则北,根據(jù)提前制定好的映射規(guī)則矿微,根據(jù)請求中的URL 調(diào)用指定的servlet,如果servlet還沒有被加載尚揣,則通過反射機制將其加載到Servlet容器中涌矢,然后調(diào)用。調(diào)用完成之后將結(jié)果打包成ServletResponse返給HTTP服務(wù)器快骗,http服務(wù)器在將其解析打包成滿足http協(xié)議的數(shù)據(jù)包發(fā)送給客戶端娜庇。


image.png

那么我們一定很好奇,servlet容器怎么知道去哪里找我們的servlet類呢方篮?我們通常是以web服務(wù)的形式來注冊servlet思灌,web應(yīng)用程序通常有制定的目錄結(jié)構(gòu),如果大家都遵從這個目錄結(jié)構(gòu)恭取,那servlet容器就知道去哪里找我們的servlet類了泰偿。
web應(yīng)用程序的目錄結(jié)構(gòu)如下


image.png

通常一個web應(yīng)用程序會包含多個servlet。 servlet規(guī)范中定義了一個serveltContext來對應(yīng)這個web應(yīng)用程序蜈垮。其中可以存放一些公共信息耗跛,servlet之間也可以通過它來進(jìn)行交互。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末攒发,一起剝皮案震驚了整個濱河市调塌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惠猿,老刑警劉巖羔砾,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡姜凄,警方通過查閱死者的電腦和手機政溃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來态秧,“玉大人董虱,你說我怎么就攤上這事∩暧悖” “怎么了愤诱?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捐友。 經(jīng)常有香客問我淫半,道長,這世上最難降的妖魔是什么匣砖? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任撮慨,我火速辦了婚禮,結(jié)果婚禮上脆粥,老公的妹妹穿的比我還像新娘砌溺。我一直安慰自己,他們只是感情好变隔,可當(dāng)我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布规伐。 她就那樣靜靜地躺著,像睡著了一般匣缘。 火紅的嫁衣襯著肌膚如雪猖闪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天肌厨,我揣著相機與錄音培慌,去河邊找鬼。 笑死柑爸,一個胖子當(dāng)著我的面吹牛吵护,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播表鳍,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼馅而,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了譬圣?” 一聲冷哼從身側(cè)響起瓮恭,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厘熟,沒想到半個月后屯蹦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體维哈,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年登澜,在試婚紗的時候發(fā)現(xiàn)自己被綠了阔挠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡帖渠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出竭宰,到底是詐尸還是另有隱情空郊,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布切揭,位于F島的核電站狞甚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏廓旬。R本人自食惡果不足惜哼审,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望孕豹。 院中可真熱鬧涩盾,春花似錦、人聲如沸励背。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叶眉。三九已至址儒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間衅疙,已是汗流浹背莲趣。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饱溢,地道東北人喧伞。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像绩郎,于是被迫代替她去往敵國和親絮识。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Based on Java? Servlet Specification v3.1 [TOC] Servlet和S...
    0x70e8閱讀 1,316評論 0 7
  • IOC 控制反轉(zhuǎn)容器控制程序?qū)ο笾g的關(guān)系嗽上,而不是傳統(tǒng)實現(xiàn)中次舌,有程序代碼之間控制,又名依賴注入兽愤。All 類的創(chuàng)建彼念,...
    irckwk1閱讀 942評論 0 0
  • 這部分主要是與Java Web和Web Service相關(guān)的面試題挪圾。 96、闡述Servlet和CGI的區(qū)別? 答...
    雜貨鋪老板閱讀 1,404評論 0 10
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,810評論 0 11
  • 1.內(nèi)存泄露 內(nèi)存泄漏兩種情況: 在堆中申請的空間沒有被釋放(虛擬機gc可以解決) 對象已不在使用逐沙,但仍然在內(nèi)存中...
    Aimerwhy閱讀 595評論 0 0