欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Tomcat服務(wù)器的運(yùn)行原理是怎樣的?

整體架構(gòu)

成都創(chuàng)新互聯(lián)是專業(yè)的溧陽(yáng)網(wǎng)站建設(shè)公司,溧陽(yáng)接單;提供網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行溧陽(yáng)網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

我們想要了解一個(gè)框架,首先要了解它是干什么的,Tomcat我們都知道,是用于處理連接過(guò)來(lái)的Socket請(qǐng)求的。那么Tomcat就會(huì)有兩個(gè)功能:

  • 對(duì)外處理連接,將收到的字節(jié)流轉(zhuǎn)化為自己想要的Request和Response對(duì)象
  • 對(duì)內(nèi)處理Servlet,將對(duì)應(yīng)的Request請(qǐng)求分發(fā)到相應(yīng)的Servlet中

那么我們整體的骨架就出來(lái)了,Tomcat其實(shí)就分為兩大部分,一部分是連接器(Connnector)處理對(duì)外連接和容器(Container)管理對(duì)內(nèi)的Servelet。大體的關(guān)系圖如下

Tomcat服務(wù)器的運(yùn)行原理是怎樣的?

最外層的大框就是代表一個(gè)Tomcat服務(wù),一個(gè)Tomcat服務(wù)可以對(duì)應(yīng)多個(gè)Service。每個(gè)Service都有連接器和容器。這些對(duì)應(yīng)的關(guān)系我們也可以打開(kāi)在Tomcat目錄配置文件中server.xml中看出來(lái)。

<Server port="8006" shutdown="SHUTDOWN">
  <Service name="Catalina">

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">

        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"

      </Host>
    </Engine>
  </Service>
</Server>

這里我將其中配置文件中刪除了一些內(nèi)容精簡(jiǎn)了一下,這里我們可以看到連接器其實(shí)就是Connector,一個(gè)Service中可以有多個(gè)連接器,容器其實(shí)對(duì)應(yīng)的就是Engine。

Tomcat的整體架構(gòu)簡(jiǎn)單來(lái)說(shuō)就是這樣的對(duì)應(yīng)關(guān)系。接下來(lái)我們簡(jiǎn)單的介紹連接器的整體架構(gòu)和容器的整體架構(gòu)。

連接器

我們可以看到上圖中連接器傳給容器的是ServletRequest對(duì)象,而容器傳給連接器的是ServletResponse對(duì)象,這些在網(wǎng)絡(luò)傳輸過(guò)程中是肯定不行的,因?yàn)榫W(wǎng)絡(luò)傳輸中傳送的字節(jié)流。所以連接器的功能需求我們大概能總結(jié)出來(lái)以下幾點(diǎn)。

  • Socket連接
  • 讀取請(qǐng)求網(wǎng)絡(luò)中的字節(jié)流
  • 根據(jù)相應(yīng)的協(xié)議(Http/AJP)解析字節(jié)流,生成統(tǒng)一的Tomcat Requestt對(duì)象
  • Tomcat Reques傳給容器
  • 容器返回Tomcat Response對(duì)象
  • Tomcat Response對(duì)象轉(zhuǎn)換為字節(jié)流
  • 將字節(jié)流返回給客戶端

其實(shí)上面的細(xì)分都能總結(jié)為以下的三點(diǎn)

  • 網(wǎng)絡(luò)通信
  • 應(yīng)用層協(xié)議的解析
  • Tomcat的Request/ResponseServletRequest/ServletResponse對(duì)象的轉(zhuǎn)化

而在Tomcat中它也用了三個(gè)類來(lái)實(shí)現(xiàn)上面的三個(gè)功能,分別對(duì)應(yīng)如下

  • EndPoint
  • Processor
  • Adapter

用圖表示他們的關(guān)系的話就是這樣

Tomcat服務(wù)器的運(yùn)行原理是怎樣的?

容器

容器,顧名思義就是裝東西的器具,那么這個(gè)Tomcat容器是裝什么的呢?其實(shí)主要的就是裝了Servlet的。那么容器是如何設(shè)計(jì)的呢?Tomcat的容器設(shè)計(jì)其實(shí)是用了組合設(shè)計(jì)模式。其實(shí)從Server.xml中我們也能看到其關(guān)系了。

  <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

      </Host>
    </Engine>

在這里面我們只能看到容器中的兩個(gè)模塊,一個(gè)是頂層模塊Engine,另一個(gè)是Host,其實(shí)還有兩個(gè)模塊,一個(gè)是Context對(duì)應(yīng)的是我們webapp里面的每個(gè)應(yīng)用文件夾,每個(gè)文件夾就是對(duì)應(yīng)一個(gè)Context,還有一個(gè)模塊Wrapper對(duì)應(yīng)的是我們Context中的所有servlet,Wrapper管理了訪問(wèn)關(guān)系與具體的Servlet的對(duì)應(yīng)。圖表示就是下面這樣。

Tomcat服務(wù)器的運(yùn)行原理是怎樣的?

Tomcat中容器所有模塊都實(shí)現(xiàn)了Container接口,而組合模式的意義就是使得用戶對(duì)于單個(gè)對(duì)象和組合對(duì)象的使用具有一致性,即無(wú)論添加多少個(gè)Context其使用就是為了找到其下面的Servlet,而無(wú)論添加多少個(gè)Host也是為了找個(gè)下面的Servlet。而在容器中設(shè)計(jì)了這么多的模塊,一個(gè)請(qǐng)求過(guò)來(lái)Tomcat如何找到對(duì)應(yīng)的Servlet進(jìn)行處理呢?

請(qǐng)求如何定位

我們就舉個(gè)最簡(jiǎn)單的例子,我們本機(jī)應(yīng)用上啟動(dòng)了一個(gè)Tomcat,webapp下有我們部署的一個(gè)應(yīng)用buxuewushu。我們?cè)跒g覽器上輸入http://localhost:8080/buxuewushu/add.do是如何找到對(duì)應(yīng)Servlet進(jìn)行處理呢?

在我們啟動(dòng)Tomcat的時(shí)候,連接器就會(huì)進(jìn)行初始化監(jiān)聽(tīng)所配置的端口號(hào),這里我們配置的是8080端口對(duì)應(yīng)的協(xié)議是HTTP。

  • 請(qǐng)求發(fā)送到本機(jī)的8080端口,被在那里監(jiān)聽(tīng)的HTTP/1.1的連接器Connector獲得
  • 連接器Connector將字節(jié)流轉(zhuǎn)換為容器所需要的ServletRequest對(duì)象給同級(jí)Service下的容器模塊Engine進(jìn)行處理
  • Engine獲得地址http://localhost:8080/buxuewushu/add。匹配他下面的Host主機(jī)
  • 匹配到名為localhost的Host(就算此時(shí)請(qǐng)求為具體的ip,沒(méi)有配置相應(yīng)的Host,也會(huì)交給名為localhost的Host進(jìn)行處理,因?yàn)樗悄J(rèn)的主機(jī))
  • Host匹配到路徑為/buxuewushu的Context,即在webapp下面找到相應(yīng)的文件夾
  • Context匹配到URL規(guī)則為*.do的servlet,對(duì)應(yīng)為某個(gè)Servlet類
  • 調(diào)用其doGet或者doPost方法
  • Servlet執(zhí)行完以后將對(duì)象返回給Context
  • Context返回給Host
  • Host返回給Engine
  • Engine返回給連接器Connector
  • 連接器Connector將對(duì)象解析為字節(jié)流發(fā)送給客戶端

Tomcat服務(wù)器的運(yùn)行原理是怎樣的?

網(wǎng)站欄目:Tomcat服務(wù)器的運(yùn)行原理是怎樣的?
分享路徑:http://chinadenli.net/article42/joiohc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、用戶體驗(yàn)、微信公眾號(hào)、做網(wǎng)站App開(kāi)發(fā)、營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)
国产一区二区三区口爆在线| 激情内射亚洲一区二区三区 | 欧美亚洲另类久久久精品| 日韩在线精品视频观看| 免费在线观看欧美喷水黄片| 国产乱久久亚洲国产精品| 国产欧美日韩综合精品二区| 日韩欧美一区二区亚洲| 国产成人亚洲综合色就色| 成人欧美一区二区三区视频| 国产女高清在线看免费观看| 国产午夜福利在线免费观看| 国产一区二区不卡在线播放| 国产福利在线播放麻豆| 日韩熟妇人妻一区二区三区| 内用黄老外示儒术出处| 国产精品不卡免费视频| 丝袜美女诱惑在线观看| 九九视频通过这里有精品| 亚洲欧美日本视频一区二区| 日韩欧美国产精品中文字幕| 夫妻性生活动态图视频| 国产精品不卡一区二区三区四区| 国产国产精品精品在线| 国产精品香蕉一级免费| 一区二区三区日韩中文| 久久福利视频在线观看| 久久一区内射污污内射亚洲| 亚洲成人黄色一级大片| 国产精品久久精品国产| 国产精品乱子伦一区二区三区| 九九久久精品久久久精品| 欧美国产在线观看精品| 黄片在线免费看日韩欧美| 激情视频在线视频在线视频| 久久亚洲国产视频三级黄| 日韩精品综合免费视频| 麻豆91成人国产在线观看| 国产麻豆一线二线三线| 亚洲一区二区三区在线中文字幕| 91插插插外国一区二区婷婷|