Tomcat詳解

Tomcat系統(tǒng)架構(gòu)如下圖:

Tomcat有兩個核心組件:Connector和Container薪前,Connector組件可以被替換掉,它不僅跟服務(wù)器本身的設(shè)計有關(guān)苍狰,而且和不同的應(yīng)用場景也十分相關(guān)露筒。一個Container可以選擇對應(yīng)多個Connector。多個Connector和一個Container就形成了一個Service废酷,Service對外提供服務(wù)瘟檩。同時Server來管理Service的生命周期等。

Service:

Service主要的作用是連接Connector和Container澈蟆,把它們組裝在一起向外提供服務(wù)墨辛。一個Service只能包含一個Container,但是可以有多個Connector趴俘。

Service接口中定義了關(guān)聯(lián)Connector和Container睹簇,同時初始化它下面的其他組件的方法。但在接口中并沒有規(guī)定一定要控制它下面的組件的生命周期寥闪。所有組件的生命周期在一個Lifecycle的接口中并控制太惠。這里用到了觀察者模式。

lifecycleListener代表的是抽象觀察者橙垢,它定義了一個lifecycleEvent方法垛叨,這個方法就是當(dāng)主題變化時要執(zhí)行的方法。ServerLifecycleListener代表的是具體的觀察者柜某,他實現(xiàn)了LifecycleListener借口的方法嗽元,就是這個具體的觀察者具體的實現(xiàn)方式。Lifecycle接口代表的是抽象主題喂击,它定義了管理觀察者的方法和它要做的其它方法剂癌。而StandardServer代表的是具體主題,他實現(xiàn)了抽象主題的所有方法翰绊。

Server:

server提供一個接口讓其他程序能夠訪問到這個Service集合佩谷,同時要維護它所包含的所有Service的生命周期,包括如何初始化监嗜、如何結(jié)束服務(wù)谐檀、如何找到別人要訪問的Service。

Connect組件:

Connect組件的主要負(fù)責(zé)任務(wù)是接受瀏覽器發(fā)過來的TCP連接請求裁奇,創(chuàng)建一個Request和Response對象分別用于請求端交換數(shù)據(jù)桐猬。然后會產(chǎn)生一個線程來處理這個請求并把產(chǎn)生的Request和Response對象傳給處理這個請求的線程,處理這個請求的線程就是Container組件要做的事了刽肠。

Container組件:

Container是容器的父接口溃肪,所有子容器都必須實現(xiàn)這個接口免胃,Container容器采用的是典型的責(zé)任鏈的設(shè)計模式,它由4個子容器組件構(gòu)成惫撰,分別是Engine羔沙、Host、Content和Wrapper厨钻,這4個組件不是平行的扼雏,而是父子關(guān)系,Engine包含Host夯膀,Host包含Context呢蛤,Context包含Wrapper。通常一個Servlet class對應(yīng)一個Wrapper棍郎,如果有多個Servlet其障,則可以定義多個Wrapper。

在責(zé)任鏈中Pipeline和Valve擴展了這個鏈的功能涂佃,使得在鏈向下傳遞的過程中励翼,能夠接收外界的干預(yù),也就是對里面的Request和Response對象傳遞做干預(yù):

Container的總體設(shè)計:

Context還可以定義在父容器Host中辜荠,Host不是必須的汽抚,但是要運行war程序,就必須要用Host伯病,因為在war中必有web.xml文件造烁,這個文件的解析就需要Host。一個Engine代表一個完整的Servlet引擎午笛。

Engine容器:

Engine容器比較簡單惭蟋,他只定義了一些基本的關(guān)聯(lián)關(guān)系,他沒有父類容器药磺。

Host容器:

Host是Engine的子容器告组,一個Host在Engine中代表一個虛擬主機,這個虛擬主機的作用就是運行多個應(yīng)用癌佩,并且標(biāo)識這個應(yīng)用以便能夠區(qū)分它們木缝。它的子容器通常是Context,他除了關(guān)聯(lián)子容器外围辙,還保存一個主機應(yīng)有的信息我碟。

Context容器:

Context代表Servlet的Context,它具備了Servlet運行的基本環(huán)境姚建,理論上只要有Context就能運行Servlet了矫俺。Context最重要的功能就是管理它里面的Servlet實例,Servlet實例在Context中是以Wrapper出現(xiàn)的。還有一點就是Context如何才能找到正確的Servlet來執(zhí)行它恳守,這個功能是通過Request來分配的。

Wrapper容器:

Wrapper代表一個Servlet贩虾,他負(fù)責(zé)管理一個Servlet催烘,包括Servlet的裝載,初始化缎罢、執(zhí)行及資源回收伊群。Wrapper是最底層的容器,它沒有子容器了策精。

Wrapper的實現(xiàn)類是StandardWrapper舰始,StandardWrapper還實現(xiàn)了擁有一個Servlet初始化信息的ServletConfig,由此看出StandardWrapper將直接和Servlet的各種信息打交道

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咽袜,一起剝皮案震驚了整個濱河市丸卷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌询刹,老刑警劉巖谜嫉,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異凹联,居然都是意外死亡沐兰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門蔽挠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來住闯,“玉大人,你說我怎么就攤上這事澳淑”仍” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵杠巡,是天一觀的道長春寿。 經(jīng)常有香客問我,道長忽孽,這世上最難降的妖魔是什么绑改? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮兄一,結(jié)果婚禮上厘线,老公的妹妹穿的比我還像新娘。我一直安慰自己出革,他們只是感情好造壮,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般耳璧。 火紅的嫁衣襯著肌膚如雪成箫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天旨枯,我揣著相機與錄音蹬昌,去河邊找鬼。 笑死攀隔,一個胖子當(dāng)著我的面吹牛皂贩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昆汹,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼明刷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了满粗?” 一聲冷哼從身側(cè)響起辈末,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎映皆,沒想到半個月后本冲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡劫扒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年檬洞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沟饥。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡添怔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贤旷,到底是詐尸還是另有隱情广料,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布幼驶,位于F島的核電站艾杏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏盅藻。R本人自食惡果不足惜购桑,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望氏淑。 院中可真熱鬧勃蜘,春花似錦、人聲如沸假残。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至阳惹,卻和暖如春谍失,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背莹汤。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工快鱼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人体啰。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像嗽仪,于是被迫代替她去往敵國和親荒勇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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