畢業(yè)設(shè)計(jì)代做網(wǎng)站java湖南網(wǎng)站建設(shè)工作室
在一臺電腦上啟動tomcat,tomcat是server,即服務(wù)器。服務(wù)器只會被實(shí)例化一次,tomcat這只貓就是服務(wù)器。服務(wù)器下包含多個(gè)子節(jié)點(diǎn)服務(wù),即service,顧名思義就是對外提供服務(wù)。服務(wù)器通常只有一個(gè)服務(wù),默認(rèn)是卡特琳娜Catalina。
核心配置文件是server.xml
server
根節(jié)點(diǎn)就是Server,即tomcat貓🐱,只會被實(shí)例化一次,下面可以有多個(gè)service,但通常只有一個(gè),默認(rèn)為卡特琳娜Catalina.
service
Service組件的作用就是對外提供服務(wù)。
一個(gè)service有一個(gè)引擎,和按協(xié)議劃分的多個(gè)連接器connector,比如負(fù)責(zé)http協(xié)議(80端口)的連接器、負(fù)責(zé)https(443端口)的連接器、負(fù)責(zé)其他協(xié)議的連接器等等.....
連接器connector
連接器負(fù)責(zé)通信;引擎復(fù)雜請求的處理。
不同的連接器負(fù)責(zé)監(jiān)聽不同的網(wǎng)絡(luò)端口(可配置端口),處理請求,比如http協(xié)議默認(rèn)的80端口。一個(gè)連接器即是一個(gè)線程,線程一直在循環(huán)運(yùn)行,接收所有先后到來的網(wǎng)絡(luò)請求,并將每一個(gè)請求都按對應(yīng)的協(xié)議轉(zhuǎn)換為不同的request對象,隨后將其作為參數(shù)使用引擎對象進(jìn)行調(diào)用。
host
引擎是一個(gè)容器,其中包含一個(gè)或多個(gè)host對象,也即虛擬主機(jī)。host的存在保證了單個(gè)tomcat實(shí)例支持多個(gè)域名或主機(jī)名,使得一臺tomcat可以去處理多種請求?!靖鶕?jù)不同的目標(biāo)地址來區(qū)分不同的請求】
切記:host配置的是域名或主機(jī)名,一條URL中后面的請求方式等信息是取決于下面的context組件
context
為了實(shí)現(xiàn)一個(gè)虛擬主機(jī)下托管多個(gè)不同的web應(yīng)用程序(Context)每個(gè) <Context>
組件代表一個(gè)特定的Web應(yīng)用程序上下文,存放著該Web應(yīng)用程序的配置信息。
通過配置不同的 <Context>
,管理員可以為每個(gè)Web應(yīng)用程序定制獨(dú)特的設(shè)置,確保它們在同一個(gè)虛擬主機(jī)下能夠獨(dú)立運(yùn)行且相互隔離。
因?yàn)閞equest對象包含完整的URL等信息,所以引擎能夠解析到對應(yīng)的虛擬主機(jī)host上(域名),進(jìn)而在虛擬主機(jī)上找到對應(yīng)的應(yīng)用,最終找到應(yīng)用下對應(yīng)的servlet(通常就是我們寫的業(yè)務(wù)代碼)對請求進(jìn)行處理。
wrapper
一個(gè)Context應(yīng)用包含一個(gè)或多個(gè)servlet實(shí)例,同一個(gè)servlet的所有實(shí)例被Wrapper容器進(jìn)行統(tǒng)一管理。
host、Context、Wrapper都是容器。
連接器給出的request請求對象中包含了他要訪問的servlet的詳細(xì)路徑,因此給到容器中,都能通過路徑準(zhǔn)確的傳遞給下一個(gè)容器(主機(jī)名:應(yīng)用名/servlet名)
當(dāng)我們編寫的servlet完成(業(yè)務(wù)邏輯)之后,連接器將從引擎對象的方法調(diào)用獲得一個(gè)返回值response對象,最后再將respondse對象轉(zhuǎn)化為字節(jié)流返回給瀏覽器。
至此,一個(gè)請求的完整過程就結(jié)束了。這就是tomcat服務(wù)器的架構(gòu)和原理。