用戶(hù)請(qǐng)求
以現(xiàn)在微服務(wù)請(qǐng)求的方式,用戶(hù)一般上網(wǎng)操作都是通過(guò)手機(jī)、網(wǎng)頁(yè)等各種方式點(diǎn)擊操作,這時(shí)候服務(wù)器會(huì)根據(jù)不同的請(qǐng)求分別轉(zhuǎn)發(fā)至后面各個(gè)對(duì)應(yīng)的服務(wù)上茫陆,最簡(jiǎn)單的就是如圖所示,只有一個(gè)服務(wù)器A擎析,服務(wù)器B.
兩個(gè)程序分別部署在對(duì)應(yīng)的服務(wù)器A和服務(wù)器B上簿盅,那么請(qǐng)求發(fā)起如A服務(wù)請(qǐng)求至B服務(wù)時(shí),請(qǐng)求路徑是什么樣子的揍魂?tomcat是怎么實(shí)現(xiàn)服務(wù)器A到B的請(qǐng)求
應(yīng)用部署
一般的web項(xiàng)目部署到Tomcat容器的方式有三種:
- war包
- 文件夾形式
一般情況下我們都會(huì)選擇前兩種桨醋,把應(yīng)用程序打成對(duì)應(yīng)的war包或者文件夾形式放在Tomcat的webapps文件夾下進(jìn)行啟動(dòng)。
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
- appBase:應(yīng)用部署目錄
- unpackWARs:自動(dòng)解壓war包现斋,使用解壓后對(duì)應(yīng)的文件夾
- autoDeploy:熱部署
- Value標(biāo)簽表示這個(gè)虛擬主機(jī)下的日志存放的地址
- Xml描述方式部署
<Context path="/Helloworld" relaodable="false" docBase="D:\IdeaProjects\Demo\target\classes">
</Context>
- path : 訪問(wèn)項(xiàng)目的路徑
- relaodable : tomcat會(huì)持續(xù)監(jiān)測(cè)Javabean喜最,一旦發(fā)現(xiàn)Javabean源文件改動(dòng),服務(wù)器立即重啟
- docBase : 應(yīng)用所在的文件夾/war包對(duì)應(yīng)的路徑(不受限制)庄蹋,如果docBase如果是空瞬内,表示項(xiàng)目沒(méi)用
tomcat不支持jar包部署迷雪,在webapps目錄下,一個(gè)文件夾代表一個(gè)應(yīng)用虫蝶,假設(shè)在webapps下放入一個(gè)jar時(shí)章咧,tomcat無(wú)法試別到底是依賴(lài)的jar包還是服務(wù)應(yīng)用
發(fā)起請(qǐng)求
- 應(yīng)用程序根據(jù)對(duì)應(yīng)業(yè)務(wù)生成和組裝業(yè)務(wù)數(shù)據(jù)
- 建立連接
根據(jù)業(yè)務(wù)需要,組裝符合http協(xié)議的數(shù)據(jù)
- http協(xié)議是應(yīng)用層協(xié)議能真,它不關(guān)心數(shù)據(jù)傳輸赁严,主要關(guān)心的是數(shù)據(jù)格式,一個(gè)http協(xié)議包括請(qǐng)求行粉铐,請(qǐng)求頭疼约,請(qǐng)求體
- http應(yīng)用層向下傳輸?shù)搅薚CP/UDP
操作系統(tǒng)有tcp_connect()方法。應(yīng)用程序通過(guò)操作系統(tǒng)提供的socket接口調(diào)用建立tcp連接
3.傳輸送數(shù)據(jù)
Connector標(biāo)簽對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)Connector蝙泼,Connector標(biāo)簽定義了對(duì)應(yīng)的協(xié)議忆谓,類(lèi)里面定義了Endpoint對(duì)應(yīng)的抽象類(lèi)AbstractEndpoint,AbstractEndpoint對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)有AprEndpoint(apache踱承,JIoEndpoint(BIO), NioEndpoint(Nio)
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
tomcat通過(guò)socket傳輸倡缠,根據(jù)不同協(xié)議進(jìn)行解析為Request,然后tomcat通過(guò)Endpoint組件來(lái)接受Socket的連接茎活。
Tomcat7里NIO和BIO都存在昙沦,默認(rèn)是BIO。Tomcat 8以后主要把NIO改為默認(rèn)载荔,BIO去掉了
tomcat通過(guò)Connector處理相關(guān)請(qǐng)求盾饮。Connector使用ProtocolHandler處理器來(lái)處理請(qǐng)求。不同的ProtocolHandler代表不同連接類(lèi)型懒熙。
- Tomcat容器
- Tomcat是一個(gè)servlet容器
- Context所謂的容器主要是指繼承Container(容器)丘损,Container繼承Lifecycle(生命周期),Container有4個(gè)實(shí)現(xiàn)接口工扎,分別是Host徘钥,Context, Engine, Wrapper
<Context path="/HelloWord" relaodable="false" docBase="D:\IdeaProjects\Demo\target\classes"/>
-
通過(guò)server.xml知道,Context是Host下的一個(gè)子節(jié)點(diǎn)肢娘,Host節(jié)點(diǎn)表示tomcat內(nèi)部的虛擬主機(jī)呈础,如果虛擬主機(jī)沒(méi)找到,默認(rèn)找localhost橱健。Engine是host的上一級(jí)容器而钞,用于管理Host。Wrapper在context之后拘荡,Context管理多個(gè)Wapper臼节,Wrapper管理多個(gè)servlet
1639724545(1).jpg