Tomcat簡(jiǎn)介

一裕膀、概念

Tomcat 服務(wù)器是一個(gè)開源的輕量級(jí)Web應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)量小的場(chǎng)合下被普遍使用勇哗,是開發(fā)和調(diào)試Servlet魂角、JSP 程序的首選。

二智绸、原理

Tomcat結(jié)構(gòu)圖:

Tomcat主要組件:服務(wù)器Server,服務(wù)Service访忿,連接器Connector瞧栗、容器Container。連接器Connector和容器Container是Tomcat的核心海铆。

????一個(gè)Container容器和一個(gè)或多個(gè)Connector組合在一起迹恐,加上其他一些支持的組件共同組成一個(gè)Service服務(wù),有了Service服務(wù)便可以對(duì)外提供能力了卧斟,但是Service服務(wù)的生存需要一個(gè)環(huán)境殴边,這個(gè)環(huán)境便是Server,Server組件為Service服務(wù)的正常使用提供了生存環(huán)境珍语,Server組件可以同時(shí)管理一個(gè)或多個(gè)Service服務(wù)锤岸。

三、兩大組件

1板乙、Connector

????一個(gè)Connecter將在某個(gè)指定的端口上偵聽客戶請(qǐng)求是偷,接收瀏覽器的發(fā)過(guò)來(lái)的 tcp 連接請(qǐng)求,創(chuàng)建一個(gè) Request 和 Response 對(duì)象分別用于和請(qǐng)求端交換數(shù)據(jù)募逞,然后會(huì)產(chǎn)生一個(gè)線程來(lái)處理這個(gè)請(qǐng)求并把產(chǎn)生的 Request 和 Response 對(duì)象傳給處理Engine(Container中的一部分)蛋铆,從Engine出獲得響應(yīng)并返回客戶。?

Tomcat中有兩個(gè)經(jīng)典的Connector放接,一個(gè)直接偵聽來(lái)自Browser的HTTP請(qǐng)求刺啦,另外一個(gè)來(lái)自其他的WebServer請(qǐng)求。HTTP/1.1 Connector在端口8080處偵聽來(lái)自客戶Browser的HTTP請(qǐng)求纠脾,AJP/1.3 Connector在端口8009處偵聽其他Web Server(其他的HTTP服務(wù)器)的Servlet/JSP請(qǐng)求玛瘸。

Connector 最重要的功能就是接收連接請(qǐng)求然后分配線程讓 Container 來(lái)處理這個(gè)請(qǐng)求,所以這必然是多線程的苟蹈,多線程的處理是 Connector 設(shè)計(jì)的核心捧韵。

2、Container

Container是容器的父接口汉操,該容器的設(shè)計(jì)用的是典型的責(zé)任鏈的設(shè)計(jì)模式再来,它由四個(gè)自容器組件構(gòu)成,分別是Engine、Host芒篷、Context搜变、Wrapper。這四個(gè)組件是負(fù)責(zé)關(guān)系针炉,存在包含關(guān)系挠他。通常一個(gè)Servlet class對(duì)應(yīng)一個(gè)Wrapper,如果有多個(gè)Servlet定義多個(gè)Wrapper篡帕,如果有多個(gè)Wrapper就要定義一個(gè)更高的Container殖侵,如Context。

Context 還可以定義在父容器 Host 中镰烧,Host 不是必須的拢军,但是要運(yùn)行 war 程序,就必須要 Host怔鳖,因?yàn)?war 中必有 web.xml 文件茉唉,這個(gè)文件的解析就需要 Host 了,如果要有多個(gè) Host 就要定義一個(gè) top 容器 Engine 了结执。而 Engine 沒有父容器了度陆,一個(gè) Engine 代表一個(gè)完整的 Servlet 引擎。

Engine 容器

Engine 容器比較簡(jiǎn)單献幔,它只定義了一些基本的關(guān)聯(lián)關(guān)系

Host 容器

Host 是 Engine 的子容器懂傀,一個(gè) Host 在 Engine 中代表一個(gè)虛擬主機(jī),這個(gè)虛擬主機(jī)的作用就是運(yùn)行多個(gè)應(yīng)用蜡感,它負(fù)責(zé)安裝和展開這些應(yīng)用鸿竖,并且標(biāo)識(shí)這個(gè)應(yīng)用以便能夠區(qū)分它們。它的子容器通常是 Context铸敏,它除了關(guān)聯(lián)子容器外缚忧,還有就是保存一個(gè)主機(jī)應(yīng)該有的信息。

Context 容器

Context 代表 Servlet 的 Context杈笔,它具備了 Servlet 運(yùn)行的基本環(huán)境闪水,理論上只要有 Context 就能運(yùn)行 Servlet 了。簡(jiǎn)單的 Tomcat 可以沒有 Engine 和 Host蒙具。Context 最重要的功能就是管理它里面的 Servlet 實(shí)例球榆,Servlet 實(shí)例在 Context 中是以 Wrapper 出現(xiàn)的,還有一點(diǎn)就是 Context 如何才能找到正確的 Servlet 來(lái)執(zhí)行它呢禁筏? Tomcat5 以前是通過(guò)一個(gè) Mapper 類來(lái)管理的持钉,Tomcat5 以后這個(gè)功能被移到了 request 中,在前面的時(shí)序圖中就可以發(fā)現(xiàn)獲取子容器都是通過(guò) request 來(lái)分配的篱昔。

Wrapper 容器

Wrapper 代表一個(gè) Servlet每强,它負(fù)責(zé)管理一個(gè) Servlet始腾,包括的 Servlet 的裝載、初始化空执、執(zhí)行以及資源回收浪箭。Wrapper 是最底層的容器,它沒有子容器了辨绊,所以調(diào)用它的 addChild 將會(huì)報(bào)錯(cuò)奶栖。

Wrapper 的實(shí)現(xiàn)類是 StandardWrapper,StandardWrapper 還實(shí)現(xiàn)了擁有一個(gè) Servlet 初始化信息的 ServletConfig门坷,由此看出 StandardWrapper 將直接和 Servlet 的各種信息打交道宣鄙。

3、其他組件

Tomcat 還有其它重要的組件默蚌,如安全組件 security冻晤、logger 日志組件、session敏簿、mbeans、naming 等其它組件宣虾。這些組件共同為 Connector 和 Container 提供必要的服務(wù)惯裕。

四、HTTP請(qǐng)求過(guò)程

Tomcat Server處理一個(gè)HTTP請(qǐng)求的過(guò)程

1绣硝、用戶點(diǎn)擊網(wǎng)頁(yè)內(nèi)容蜻势,請(qǐng)求被發(fā)送到本機(jī)端口8080,被在那里監(jiān)聽的Coyote HTTP/1.1 Connector獲得鹉胖。

2握玛、Connector把該請(qǐng)求交給它所在的Service的Engine來(lái)處理,并等待Engine的回應(yīng)甫菠。

3挠铲、Engine獲得請(qǐng)求localhost/test/index.jsp,匹配所有的虛擬主機(jī)Host寂诱。

4拂苹、Engine匹配到名為localhost的Host(即使匹配不到也把請(qǐng)求交給該Host處理,因?yàn)樵揌ost被定義為該Engine的默認(rèn)主機(jī))痰洒,名為localhost的Host獲得請(qǐng)求/test/index.jsp瓢棒,匹配它所擁有的所有的Context。Host匹配到路徑為/test的Context(如果匹配不到就把該請(qǐng)求交給路徑名為“ ”的Context去處理)丘喻。

5脯宿、path=“/test”的Context獲得請(qǐng)求/index.jsp,在它的mapping table中尋找出對(duì)應(yīng)的Servlet泉粉。Context匹配到URL PATTERN為*.jsp的Servlet,對(duì)應(yīng)于JspServlet類连霉。

6、構(gòu)造HttpServletRequest對(duì)象和HttpServletResponse對(duì)象,作為參數(shù)調(diào)用JspServlet的doGet()或doPost().執(zhí)行業(yè)務(wù)邏輯窘面、數(shù)據(jù)存儲(chǔ)等程序翠语。

7、Context把執(zhí)行完之后的HttpServletResponse對(duì)象返回給Host财边。

8肌括、Host把HttpServletResponse對(duì)象返回給Engine。

9酣难、Engine把HttpServletResponse對(duì)象返回Connector谍夭。

10、Connector把HttpServletResponse對(duì)象返回給客戶Browser憨募。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末紧索,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子菜谣,更是在濱河造成了極大的恐慌珠漂,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尾膊,死亡現(xiàn)場(chǎng)離奇詭異媳危,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)冈敛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門待笑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人抓谴,你說(shuō)我怎么就攤上這事癌压√步欤” “怎么了丐吓?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵券犁,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我粘衬,道長(zhǎng)咳促,這世上最難降的妖魔是什么勘伺? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任冲茸,我火速辦了婚禮轴术,結(jié)果婚禮上逗栽,老公的妹妹穿的比我還像新娘彼宠。我一直安慰自己,他們只是感情好弟塞,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布宣肚。 她就那樣靜靜地躺著,像睡著了一般惭适。 火紅的嫁衣襯著肌膚如雪癞志。 梳的紋絲不亂的頭發(fā)上凄杯,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音导而,去河邊找鬼。 笑死虚缎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的千康。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鸯隅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起何之,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤跟畅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后溶推,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體徊件,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年蒜危,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了虱痕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辐赞,死狀恐怖部翘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情占拍,我是刑警寧澤略就,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布捎迫,位于F島的核電站,受9級(jí)特大地震影響表牢,放射性物質(zhì)發(fā)生泄漏窄绒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一崔兴、第九天 我趴在偏房一處隱蔽的房頂上張望彰导。 院中可真熱鬧,春花似錦敲茄、人聲如沸位谋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)掏父。三九已至,卻和暖如春秆剪,著一層夾襖步出監(jiān)牢的瞬間赊淑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工仅讽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陶缺,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓洁灵,卻偏偏與公主長(zhǎng)得像饱岸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子徽千,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344