一、Tomcat 容器的總體架構(gòu)
Tomcat 容器主要用來提供servlet運(yùn)行環(huán)境罐栈,對其生命期進(jìn)行管理幕袱,從而提供各種服務(wù)service。
Tomcat 的兩大核心組件:Connector和Container共同組成了各種服務(wù)悠瞬。如下圖所示:
Tomcat總體架構(gòu)分析圖
Connector
connector主要用于監(jiān)聽各種協(xié)議的發(fā)送的請求,并創(chuàng)建出請求響應(yīng)的Request和Response對象涯捻。
之后創(chuàng)建一個(gè)處理該請求的線程浅妆,傳入request和response對象,并提交到container中障癌,等待container執(zhí)行凌外。
另外Connector有多種實(shí)現(xiàn),一個(gè)Tomcat容器中通常具有一個(gè)Connector組成的集合涛浙。
Container
Container包含一個(gè)責(zé)任鏈設(shè)計(jì)模式康辑,層層調(diào)用最終通過Servlet的包裝wrapper實(shí)現(xiàn)請求的調(diào)用。
Service與Server
Service是一個(gè)接口轿亮,負(fù)責(zé)管理Connector和Container疮薇。其標(biāo)準(zhǔn)實(shí)現(xiàn)類StandardService由Connector和Container組成。
Service接口同時(shí)也繼承了LifeCycle接口我注,方便對tomcat中各個(gè)組件的整體生命周期進(jìn)行管理按咒。
Server接口負(fù)責(zé)管理Tomcat中的Service集合。通過Server接口但骨,tomcat實(shí)現(xiàn)管理和運(yùn)行service励七,對外部暴露應(yīng)用。
二奔缠、Connector詳解
Connector的重要作用在于:接受請求掠抬,封裝請求和相應(yīng)對象,創(chuàng)建線程任務(wù)交給Container處理
Connector的信息可以在server.xml配置文件中看到校哎。明顯的可以看到8080是TCP連接端口两波,8009是Apache服務(wù)器和tomcat
通信使用的端口等。
Connector在server start時(shí)進(jìn)行初始化,之后等待請求到來雨女,通過httpProcessor包裝線程和請求對象谚攒,交給container處理。
流程如下圖所示:
請求處理時(shí)序圖
三氛堕、Container詳解
Tomcat容器中馏臭,Container實(shí)際上是用責(zé)任鏈設(shè)計(jì)模式。Container是所有容器的父接口讼稚,任何一種容器實(shí)現(xiàn)括儒。
它具有四個(gè)子容器:Engine,Host锐想,Context帮寻,Wrapper;四者成父子關(guān)系
Engine是整個(gè)tomcat容器的完整servlet引擎赠摇,通過它在最上層調(diào)用固逗;
Host代表Engine中的一個(gè)虛擬機(jī),這個(gè)Host的作用在于運(yùn)行多個(gè)應(yīng)用并區(qū)分它們(Context)藕帜;
Context是Servlet的基本運(yùn)行環(huán)境烫罩,它維護(hù)了servlet與url、絕對路徑的關(guān)系等洽故。每個(gè)應(yīng)用就是一個(gè)Context贝攒;
Wrapper是對Servlet原生對象的包裝,Wrapper便于對LifeCycle生命周期進(jìn)行管理
四时甚、lifecycle接口與生命周期
上面已經(jīng)講到隘弊,Tomcat中幾乎所有的接口都實(shí)現(xiàn)了LifeCycle接口,這也使得荒适,整個(gè)tomcat的啟動(dòng)和關(guān)閉過程中梨熙,可以直接
通過責(zé)任鏈設(shè)計(jì)模式Lifecycle接口實(shí)現(xiàn)對所有對象的生命周期管理。同時(shí)可以在各個(gè)子接口中實(shí)現(xiàn)自己的功能呢吻贿。
例如在server 的Start過程中可以解析默認(rèn)的server.xml文件串结,而container的start過程中會(huì)解析web.xml等。
在stop的時(shí)候舅列,container又可以處理服務(wù)器緩存的session肌割。將他們持久化 到磁盤上。