Insidetomcat(二)-------Toplevelview

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è)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供珙縣建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:muchs.cn

這些組件包括: Server,Service,Connector,Engine,Host,Context,Wrapper.

這么一堆組件,看起來比較復(fù)雜,怎么去理解呢?本文主要來個top level view。

回到我們最初的對servlet容器的理解,一個servlet容器最重要的功能無非就是接受http請求,解析http請求生成request,并調(diào)用servlet,生成響應(yīng)response。那么以上工作的入口在哪里,沒錯,那就是Connector組件。先來認(rèn)識一下Connector組件。

Connector組件

Connector主要功能是Socket連接等待Http請求,創(chuàng)建javax.servlet.http.HttpServletRequest和javax.servlet.http.HttpServletResponse實例,并將其作為參數(shù)調(diào)用容器。當(dāng)然Connector并不只處理http協(xié)議的請求,支持多種協(xié)議如https,AJP/1.3等。不同的Connector代表了不同的協(xié)議,同時在不同的端口上面監(jiān)聽。這個可以再Server.xml里進(jìn)行配置。connector的工作就像下圖的前半部分:

從以上看出Connector負(fù)責(zé)接受請求和生成request(Request創(chuàng)建過程:parse header,parse cookie,parse parameter、設(shè)置encodeing等)和response。再把參數(shù)傳給容器。最后我們是要由url請求對應(yīng)的servlet的service方法來接收這兩個參數(shù),并處理生成response。那么后面的load servlet和invoke servlet的工作就交給容器來處理了,容器說起來很抽象誒,它代表什么?下面介紹一下Container。

Container組件

沒錯,容器只是一個抽象的概念,在tomcat里Engine,Host,Context,Wrapper都代表容器。它們各自的功能如下:

Engine:代表了整個Catalina servlet引擎.

Host:代表了一個具有多個應(yīng)用實例(Context)的虛擬主機(注:tomcat里默認(rèn)只有一個localhost虛擬主機,所有的請求默認(rèn)都轉(zhuǎn)發(fā)給它,它的應(yīng)用實例都默認(rèn)的放在webapps目錄下面。Tomcat支持多虛擬主機,可以再server.xml里面進(jìn)行配置).

Context:代表了一個應(yīng)用實例,也就是我們平常的一個web應(yīng)用。一個Context有一個或者多個wrappers.

Wrapper:代表了一個單獨的servlet.

有了Connector和Container(Engine,Host,Context,Wrapper)似乎一個servlet容器就可以工作了,那么文章一開始提到的Server和Service干啥用的呢?

Service組件

Service包含了一個Engine元素和多個Connector元素。上文提到的connector有多種,這些connector可以共享一個servlet引擎。同時分開運行。而其管理是有service來管理的。

Server組件

Server它代表了整個Servlet容器。它提供了一套啟動和停止整個系統(tǒng)的機制。而我們不用去關(guān)心內(nèi)部的原理。它包含了一個或者多個service實例。當(dāng)你啟動一個server,它把所有的內(nèi)部組件都初始化。同時它提供一個監(jiān)聽端口,時刻監(jiān)聽shutdown命令。并負(fù)責(zé)整個系統(tǒng)的stop過程。同時Server也提供了JNDI等其他java EE服務(wù)的實現(xiàn)??梢栽賡erver里初始化JNDI數(shù)據(jù)源(在server.xml里配置)。

以上包括了tomcat的全部組件,其關(guān)系可由下圖片表示:

Server.xml配置文件

關(guān)心內(nèi)部的一個Server起來的時候,它怎么知道要啟動哪些Service或Connector?在server起來的時候是通過讀取server.xml里的配置來組織和初始化整個容器,也就是說server.xml實際上就代表了一個server實例,它包含了server要在哪個端口上面監(jiān)聽shutdown,server使用哪個類?connector應(yīng)該包括哪些,各個connector的監(jiān)聽端口和協(xié)議是什么?以及有幾個host,host名稱是什么?host的base目錄在哪里?默認(rèn)的context是哪個?還有Engine、service等等一些列屬性。

下面看看一個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://muchs.cn/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)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作