Tomcat中最頂層的容器是Server,代表著整個服務(wù)器,從上圖中可以看出,一個Server可以包含至少一個Service,用于具體提供服務(wù)。
Service主要包含兩個部分:Connector和Container。從上圖可以看出 Tomcat 的心臟就是這兩個組件,他們的作用如下:
1、Connector用于處理連接相關(guān)的事情,并提供Socket與Request和Response相關(guān)的轉(zhuǎn)化;
2、Container用于封裝和管理Servlet,以及具體處理Request請求;
一個Tomcat中只有一個Server,一個Server可以包含多個Service,一個Service只有一個Container,但是可以有多個Connector,這是因?yàn)橐粋€服務(wù)可以有多個連接,如同時提供Http和Https鏈接,也可以提供向相同協(xié)議不同端口的連接。
接收請求的連接器connector組件作用描述:
EndPointEndPoint 是 Coyote 通信端點(diǎn),即通信監(jiān)聽的接?,是具體Socket接收和發(fā)送處理器,是對傳輸層的抽象,因此EndPoint?來實(shí)現(xiàn)TCP/IP協(xié)議的
Processor 是Coyote 協(xié)議處理接? ,如果說EndPoint是?來實(shí)現(xiàn)TCP/IP協(xié)議的,那么Processor?來實(shí)現(xiàn)HTTP協(xié)議,Processor接收來?EndPoint的Socket,讀取字節(jié)流解析成Tomcat Request和Response對象,并通過Adapter將其提交到容器處理,Processor是對應(yīng)?層協(xié)議的抽象
ProtocolHandlerCoyote 協(xié)議接?, 通過Endpoint 和 Processor , 實(shí)現(xiàn)針對具體協(xié)議的處理能?。Tomcat 按照協(xié)議和I/O 提供了6個實(shí)現(xiàn)類 : AjpNioProtocol ,AjpAprProtocol, AjpNio2Protocol , Http11NioProtocol ,Http11Nio2Protocol ,Http11AprProtocol
Adapter由于協(xié)議不同,客戶端發(fā)過來的請求信息也不盡相同,Tomcat定義了??的Request類來封裝這些請求信息。ProtocolHandler接?負(fù)責(zé)解析請求并?成Tomcat Request類。但是這個Request對象不是標(biāo)準(zhǔn)的ServletRequest,不能?Tomcat Request作為參數(shù)來調(diào)?容器。Tomcat設(shè)計(jì)者的解決?案是引?CoyoteAdapter,這是適配器模式的經(jīng)典運(yùn)?,連接器調(diào)?CoyoteAdapter的Sevice?法,傳?的是Tomcat Request對象,CoyoteAdapter負(fù)責(zé)將Tomcat Request轉(zhuǎn)成ServletRequest,再調(diào)?容器
Container處理請求是使用Pipeline-Value管道來處理的!
Pipeline-Value是責(zé)任鏈模式,責(zé)任鏈模式是指在一個請求處理的過程中有很多處理者依次對請求進(jìn)行處理,每個處理者負(fù)責(zé)做自己相應(yīng)的處理,處理完之后將處理后的請求返回,再讓下一個處理著繼續(xù)處理。 但是!Pipeline-Value使用的責(zé)任鏈模式和普通的責(zé)任鏈模式有些不同!區(qū)別主要有以下兩點(diǎn):
(1)每個Pipeline都有特定的Value,而且是在管道的最后一個執(zhí)行,這個Value叫做BaseValue,BaseValue是不可刪除的;
(2)在上層容器的管道的BaseValue中會調(diào)用下層容器的管道。
我們知道Container包含四個子容器,而這四個子容器對應(yīng)的BaseValue分別在:StandardEngineValue、StandardHostValue、StandardContextValue、StandardWrapperValue。
Pipeline的處理流程圖如下:
(1)Connector在接收到請求后會首先調(diào)用最頂層容器的Pipeline來處理,這里的最頂層容器的Pipeline就是EnginePipeline(Engine的管道);
(2)在Engine的管道中依次會執(zhí)行EngineValue1、EngineValue2等等,最后會執(zhí)行StandardEngineValue,在StandardEngineValue中會調(diào)用Host管道,然后再依次執(zhí)行Host的HostValue1、HostValue2等,最后在執(zhí)行StandardHostValue,然后再依次調(diào)用Context的管道和Wrapper的管道,最后執(zhí)行到StandardWrapperValue。
(3)當(dāng)執(zhí)行到StandardWrapperValue的時候,會在StandardWrapperValue中創(chuàng)建FilterChain,并調(diào)用其doFilter方法來處理請求,這個FilterChain包含著我們配置的與請求相匹配的Filter和Servlet,其doFilter方法會依次調(diào)用所有的Filter的doFilter方法和Servlet的service方法,這樣請求就得到了處理!
(4)當(dāng)所有的Pipeline-Value都執(zhí)行完之后,并且處理完了具體的請求,這個時候就可以將返回的結(jié)果交給Connector了,Connector在通過Socket的方式將結(jié)果返回給客戶端.
假設(shè)來自客戶的請求為:
http://localhost:8080/wsota/wsota_index.jsp
1) 請求被發(fā)送到本機(jī)端口8080,被在那里偵聽的Coyote HTTP/1.1 Connector獲得
2) Connector把該請求交給它所在的Service的Engine來處理,并等待來自Engine的回應(yīng)
3) Engine獲得請求localhost/wsota/wsota_index.jsp,匹配它所擁有的所有虛擬主機(jī)Host
4) Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因?yàn)樵揌ost被定義為該Engine的默認(rèn)主機(jī))(意思上此tomcat應(yīng)用上可能部署著多個服務(wù)器,一個ip Host對應(yīng)一個服務(wù)器,每個服務(wù)器可以部署多個應(yīng)用context,一個應(yīng)用包含多個servlet)
5) localhost Host獲得請求/wsota/wsota_index.jsp,匹配它所擁有的所有Context
6) Host匹配到路徑為/wsota的Context(如果匹配不到就把該請求交給路徑名為”"的Context去處理)
7) path=”/wsota”的Context獲得請求/wsota_index.jsp,在它的mapping table中尋找對應(yīng)的servlet
8) Context匹配到URL PATTERN為*.jsp的servlet,對應(yīng)于JspServlet類
9) 構(gòu)造HttpServletRequest對象和HttpServletResponse對象,作為參數(shù)調(diào)用JspServlet的doGet或doPost方法
10)Context把執(zhí)行完了之后的HttpServletResponse對象返回給Host
11)Host把HttpServletResponse對象返回給Engine
12)Engine把HttpServletResponse對象返回給Connector
Connector把HttpServletResponse對象返回給客戶browser
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
本文名稱:Tomcat結(jié)構(gòu)體系-創(chuàng)新互聯(lián)
瀏覽地址:http://aaarwkj.com/article38/dopdsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、企業(yè)建站、網(wǎng)站策劃、動態(tài)網(wǎng)站、微信小程序、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容