Tomcat分為很多組件,這些組件一起協(xié)同工作。
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、網(wǎng)站建設(shè)、珙縣網(wǎng)絡(luò)推廣、重慶小程序開發(fā)、珙縣網(wǎng)絡(luò)營銷、珙縣企業(yè)策劃、珙縣品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供珙縣建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:jinyejixie.com這些組件包括: Server,Service,Connector,Engine,Host,Context,Wrapper.
這么一堆組件,看起來比較復(fù)雜,怎么去理解呢?本文主要來個(gè)top level view。
回到我們最初的對(duì)servlet容器的理解,一個(gè)servlet容器最重要的功能無非就是接受http請(qǐng)求,解析http請(qǐng)求生成request,并調(diào)用servlet,生成響應(yīng)response。那么以上工作的入口在哪里,沒錯(cuò),那就是Connector組件。先來認(rèn)識(shí)一下Connector組件。
Connector組件
Connector主要功能是Socket連接等待Http請(qǐng)求,創(chuàng)建javax.servlet.http.HttpServletRequest和javax.servlet.http.HttpServletResponse實(shí)例,并將其作為參數(shù)調(diào)用容器。當(dāng)然Connector并不只處理http協(xié)議的請(qǐng)求,支持多種協(xié)議如https,AJP/1.3等。不同的Connector代表了不同的協(xié)議,同時(shí)在不同的端口上面監(jiān)聽。這個(gè)可以再Server.xml里進(jìn)行配置。connector的工作就像下圖的前半部分:
從以上看出Connector負(fù)責(zé)接受請(qǐng)求和生成request(Request創(chuàng)建過程:parse header,parse cookie,parse parameter、設(shè)置encodeing等)和response。再把參數(shù)傳給容器。最后我們是要由url請(qǐng)求對(duì)應(yīng)的servlet的service方法來接收這兩個(gè)參數(shù),并處理生成response。那么后面的load servlet和invoke servlet的工作就交給容器來處理了,容器說起來很抽象誒,它代表什么?下面介紹一下Container。
Container組件
沒錯(cuò),容器只是一個(gè)抽象的概念,在tomcat里Engine,Host,Context,Wrapper都代表容器。它們各自的功能如下:
Engine:代表了整個(gè)Catalina servlet引擎.
Host:代表了一個(gè)具有多個(gè)應(yīng)用實(shí)例(Context)的虛擬主機(jī)(注:tomcat里默認(rèn)只有一個(gè)localhost虛擬主機(jī),所有的請(qǐng)求默認(rèn)都轉(zhuǎn)發(fā)給它,它的應(yīng)用實(shí)例都默認(rèn)的放在webapps目錄下面。Tomcat支持多虛擬主機(jī),可以再server.xml里面進(jìn)行配置).
Context:代表了一個(gè)應(yīng)用實(shí)例,也就是我們平常的一個(gè)web應(yīng)用。一個(gè)Context有一個(gè)或者多個(gè)wrappers.
Wrapper:代表了一個(gè)單獨(dú)的servlet.
有了Connector和Container(Engine,Host,Context,Wrapper)似乎一個(gè)servlet容器就可以工作了,那么文章一開始提到的Server和Service干啥用的呢?
Service組件
Service包含了一個(gè)Engine元素和多個(gè)Connector元素。上文提到的connector有多種,這些connector可以共享一個(gè)servlet引擎。同時(shí)分開運(yùn)行。而其管理是有service來管理的。
Server組件
Server它代表了整個(gè)Servlet容器。它提供了一套啟動(dòng)和停止整個(gè)系統(tǒng)的機(jī)制。而我們不用去關(guān)心內(nèi)部的原理。它包含了一個(gè)或者多個(gè)service實(shí)例。當(dāng)你啟動(dòng)一個(gè)server,它把所有的內(nèi)部組件都初始化。同時(shí)它提供一個(gè)監(jiān)聽端口,時(shí)刻監(jiān)聽shutdown命令。并負(fù)責(zé)整個(gè)系統(tǒng)的stop過程。同時(shí)Server也提供了JNDI等其他java EE服務(wù)的實(shí)現(xiàn)??梢栽賡erver里初始化JNDI數(shù)據(jù)源(在server.xml里配置)。
以上包括了tomcat的全部組件,其關(guān)系可由下圖片表示:
Server.xml配置文件
關(guān)心內(nèi)部的一個(gè)Server起來的時(shí)候,它怎么知道要啟動(dòng)哪些Service或Connector?在server起來的時(shí)候是通過讀取server.xml里的配置來組織和初始化整個(gè)容器,也就是說server.xml實(shí)際上就代表了一個(gè)server實(shí)例,它包含了server要在哪個(gè)端口上面監(jiān)聽shutdown,server使用哪個(gè)類?connector應(yīng)該包括哪些,各個(gè)connector的監(jiān)聽端口和協(xié)議是什么?以及有幾個(gè)host,host名稱是什么?host的base目錄在哪里?默認(rèn)的context是哪個(gè)?還有Engine、service等等一些列屬性。
下面看看一個(gè)tomcat默認(rèn)的server.xml:
<Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JasperListener" /> <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <!-- Global JNDI resources Documentation at /docs/jndi-resources-howto.html --> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host> </Engine> </Service> </Server>
文章題目:Insidetomcat(二)-------Toplevelview
網(wǎng)頁鏈接:http://jinyejixie.com/article24/chedje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、電子商務(wù)、搜索引擎優(yōu)化、關(guān)鍵詞優(yōu)化、服務(wù)器托管、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)