欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)激活碼778899分享:Tomcat 架構(gòu)剖析

柚子快報(bào)激活碼778899分享:Tomcat 架構(gòu)剖析

http://yzkb.51969.com/

HTTP -> Servlet 工作流程

HTTP服務(wù)器不直接調(diào)用業(yè)務(wù)類,而是把請(qǐng)求交給容器來(lái)處理,容器通過(guò)Servlet接口調(diào)用業(yè)務(wù)類。因此Servlet接口和Servlet容器的出現(xiàn),達(dá)到了HTTP服務(wù)器與業(yè)務(wù)類解耦的目的。而servlet接口和servlet容器這一整套規(guī)范叫作servlet規(guī)范。Tomcat按照servlet規(guī)范的要求實(shí)現(xiàn)了Servlet容器,同時(shí)它們也具有HTTP服務(wù)器的功能。作為Java程序員,如果我們要實(shí)現(xiàn)新的業(yè)務(wù)功能,只需要實(shí)現(xiàn)一個(gè)servlet,并把它注冊(cè)到Tomcat(Servlet容器)中,剩下的事情就由Tomcat幫我們處理了。

Servlet 容器工作流程

? 為了解耦,HTTP服務(wù)器不直接調(diào)用servlet,而是把請(qǐng)求交給servlet容器來(lái)處理,那servlet容器又是怎么工作的呢?當(dāng)客戶請(qǐng)求某個(gè)資源時(shí),HTTP服務(wù)器會(huì)用一個(gè)servletRequest對(duì)象把客戶的請(qǐng)求信息封裝起來(lái),然后調(diào)用servlet容器的service方法,Servlet容器拿到請(qǐng)求后,根據(jù)請(qǐng)求的uRL和servlet的映射關(guān)系,找到相應(yīng)的servlet,如果servlet還沒(méi)有被加載,就用反射機(jī)制創(chuàng)建這個(gè)servlet,并調(diào)用servlet的init方法來(lái)完成初始化,接著調(diào)用servlet的service方法來(lái)處理請(qǐng)求,把servletResponse對(duì)象返回給HTTP服務(wù)器,HTTP服務(wù)器會(huì)把響應(yīng)發(fā)送給客戶端。

Tomcat 整體架構(gòu)

Tomcat要實(shí)現(xiàn)兩個(gè)核心功能: 向外連接(Connector 連接器),向內(nèi)處理(Container 容器)

1)處理socket連接,負(fù)責(zé)網(wǎng)絡(luò)字節(jié)流與Request和Response對(duì)象的轉(zhuǎn)化。 2)加載和管理servlet,以及具體處理Request請(qǐng)求。 因此Tomcat設(shè)計(jì)了兩個(gè)核心組件連接器(Connector)和容器(container)來(lái)分別做這兩件事情。連接器負(fù)責(zé)對(duì)外交流,容器負(fù)責(zé)內(nèi)部處理。

連接器 Coyote

Coyote是Tomcat的連接器框架的名稱,是Tomcat服務(wù)器提供的供客戶端訪問(wèn)的外部接口??蛻舳送ㄟ^(guò)coyote與服務(wù)器建立連接、發(fā)送請(qǐng)求并接受響應(yīng)。 Coyote封裝了底層的網(wǎng)絡(luò)通信(Socket請(qǐng)求及響應(yīng)處理),為catalina容器提供了統(tǒng)一的接口,使catalina容器與具體的請(qǐng)求協(xié)議及ro操作方式完全解耦。Coyote將socket輸入轉(zhuǎn)換封裝為Request對(duì)象,交由catalina容器進(jìn)行處理,處理請(qǐng)求完成后,Catalina通過(guò)coyote提供的Response對(duì)象將結(jié)果寫(xiě)入輸出流。 Coyote作為獨(dú)立的模塊,只負(fù)責(zé)具體協(xié)議和IO的相關(guān)操作,與servlet規(guī)范實(shí)現(xiàn)沒(méi)有直接關(guān)系,因此即便是Request和Response對(duì)象也并未實(shí)現(xiàn)servlet規(guī)范對(duì)應(yīng)的接口,而是在catalina中將他們進(jìn)一步封裝為ServletRequest和ServletResponse。

各個(gè)組件

1)EndPoint:Coyote通信端點(diǎn),即通信監(jiān)聽(tīng)的接口,是具體socket接收和發(fā)送處理器,是對(duì)傳輸層的抽象,因此EndPoint用來(lái)實(shí)現(xiàn)TCP/IP協(xié)議的。 2)Tomcat并沒(méi)有EndPoint接口,而是提供了一個(gè)抽象類AbstractEndpoint,里面定義了兩個(gè)內(nèi)部類:Acceptor和SocketProcessor。Acceptor用于監(jiān)聽(tīng)socket連接請(qǐng)求。SocketProcessor用于處理接收到的socket請(qǐng)求,它實(shí)現(xiàn)Runnable接口,在Run方法里調(diào)用協(xié)議處理組件Processor進(jìn)行處理。為了提高處理能力,SocketProcessor被提交到線程池來(lái)執(zhí)行。而這個(gè)線程池叫作執(zhí)行器(Executor)

Processor:Coyote協(xié)議處理接口,如果說(shuō)EndPoint是用來(lái)實(shí)現(xiàn)TCP/IP協(xié)議的,那么Processor用來(lái)實(shí)現(xiàn)HTTP協(xié)議,Processor接收來(lái)自EndPoint的socket,讀取字節(jié)流解析成TomcatRequest和Response對(duì)象,并通過(guò)Adapter將其提交到容器處理,Processor是對(duì)應(yīng)用層協(xié)議的抽象。

ProtocolHandler:Coyote協(xié)議接口,通過(guò)Endpoint和Processor,實(shí)現(xiàn)針對(duì)具體協(xié)議的處理能力。Tomcat按照協(xié)議和I/O提供了6個(gè)實(shí)現(xiàn)類:AjpNioProtocol,AjpAprProtocol,AjpNio2Protocol,Http11NioProtocol, Http11Nio2Protocol,Http11AprProtocol。我們?cè)谂渲胻omcat/conf/server.xml時(shí),至少要指定具體的ProtocolHandler,當(dāng)然也可以指定協(xié)議名稱,如:HTTP/1.1,如果安裝了APR,那么將使用Http11AprProtocol,否則使用Http11NioProtocol。

Adapter: 由于協(xié)議不同,客戶端發(fā)過(guò)來(lái)的請(qǐng)求信息也不盡相同,Tomcat定義了自己的Request類來(lái)"存放"這些請(qǐng)求信息。ProtocolHandler接口負(fù)責(zé)解析請(qǐng)求并生成TomcatRequest類。但是這個(gè)Request對(duì)象不是標(biāo)準(zhǔn)的servletRequest,也就意味著,不能用TomcatRequest作為參數(shù)來(lái)調(diào)用容器。Tomcat設(shè)計(jì)者的解決方案是引入coyoteAdapter,這是適配器模式的經(jīng)典運(yùn)用,連接器調(diào)用coyoteAdapter的Sevice方法,傳入的是TomcatRequest對(duì)象,CoyoteAdapter負(fù)責(zé)TomcatRequest轉(zhuǎn)成servletRequest,再調(diào)用容器的Service方法。

在coyote中,Tomcat支持的多種I/O模型和應(yīng)用層協(xié)議,具體包含哪些IO模型和應(yīng)用層協(xié)議,請(qǐng)看下表: Tomcat支持的IO模型(自8.5/9.0版本起,Tomcat移除了對(duì)BIO的支持): Tomcat 支持的應(yīng)用層協(xié)議: 在8.0之前,Tomcat默認(rèn)采用的I/O方式為BIO,之后改為NIO。無(wú)論NIO、NIO2還是APR,在性能方面均優(yōu)于以往的BIO。如果采用APR,甚至可以達(dá)到Apache HTTP Server的影響性能。

Tomcat為了實(shí)現(xiàn)支持多種I/O模型和應(yīng)用層協(xié)議,一個(gè)容器可能對(duì)接多個(gè)連接器,就好比一個(gè)房間有多個(gè)門(mén)。但是單獨(dú)的連接器或者容器都不能對(duì)外提供服務(wù),需要把它們組裝起來(lái)才能工作,組裝后這個(gè)整體叫作service組件。這里請(qǐng)你注意,Service本身沒(méi)有做什么重要的事情,只是在連接器和容器外面多包了一層,把它們組裝在一起。Tomcat內(nèi)可能有多個(gè)service,這樣的設(shè)計(jì)也是出于靈活性的考慮。通過(guò)在Tomcat中配置多個(gè)service,可以實(shí)現(xiàn)通過(guò)不同的端口號(hào)來(lái)訪問(wèn)同一臺(tái)機(jī)器上部署的不同應(yīng)用。

容器 Catalina

Tomcat是一個(gè)由一系列可配置的組件構(gòu)成的web容器,而catalina是Tomcat的servlet容器。Catalina是servlet容器實(shí)現(xiàn),還涉及到安全、會(huì)話、集群、管理等Servlet容器架構(gòu)的各個(gè)方面。它通過(guò)松耦合的方式集成Coyote,以完成按照請(qǐng)求協(xié)議進(jìn)行數(shù)據(jù)讀寫(xiě)。同時(shí),它還包括我們的啟動(dòng)入口、Shell程序等。

Tomcat 模塊分層示意圖: Tomcat本質(zhì)上就是一款Servlet容器,因此Catalina才是Tomcat的核心,其他模塊都是為Catalina提供支撐的。比如:通過(guò)Coyote模塊提供鏈接通信,Jasper模塊提供JSP引l擎,Naming提供JNDI服務(wù),Juli提供日志服務(wù)。

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

如下圖所示,Catalina負(fù)責(zé)管理Server,而Server表示著整個(gè)服務(wù)器。Server下面有多個(gè)服務(wù)Service,每個(gè)服務(wù)都包含著多個(gè)連接器組件Connector(Coyote實(shí)現(xiàn))和一個(gè)容器組件Container。在Tomcat啟動(dòng)的時(shí)候,會(huì)初始化一個(gè)Catalina的實(shí)例。 各個(gè)組件的職責(zé):

細(xì)看 Container 結(jié)構(gòu):

Tomcat設(shè)計(jì)了4種容器,分別是Engine、Host、Context和wrapper。這4種容器不是平行關(guān)系,而是父子關(guān)系。,Tomcat通過(guò)一種分層的架構(gòu),使得servlet容器具有很好的靈活性。 各個(gè)組件的含義: 我們也可以再通過(guò)Tomcat的server.xml配置文件來(lái)加深對(duì)Tomcat容器的理解。Tomcat采用了組件化的設(shè)計(jì),它的構(gòu)成組件都是可配置的,其中最外層的是server,其他組件按照一定的格式要求配置在這個(gè)頂層容器中。 那么,Tomcat是怎么管理這些容器的呢?你會(huì)發(fā)現(xiàn)這些容器具有父子關(guān)系,形成一個(gè)樹(shù)形結(jié)構(gòu),你可能馬上就想到了設(shè)計(jì)模式中的組合模式。沒(méi)錯(cuò),Tomcat就是用組合模式來(lái)管理這些容器的。具體實(shí)現(xiàn)方法是,所有容器組件都實(shí)現(xiàn)了container接口,因此組合模式可以使得用戶對(duì)單容器對(duì)象和組合容器對(duì)象的使用具有一致性。這里單容器對(duì)象指的是最底層的wrapper,組合容器對(duì)象指的是上面的context、Host或者Engine。

Container 接口提供的方法如下: 在上面的接口看到了getParent、SetParent、addchild和removeChild等方法。 Container接口擴(kuò)展了LifeCycle接口,LifeCycle接口用來(lái)統(tǒng)一管理各組件的生命周期。

柚子快報(bào)激活碼778899分享:Tomcat 架構(gòu)剖析

http://yzkb.51969.com/

參考鏈接

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/18880821.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄