乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      編程語(yǔ)言學(xué)習(xí)Tomcat(四)之Engine和Host容器

       冒險(xiǎn)的K 2021-09-25

      在前面的文章中,我們介紹了Tomcat的連接器Connector,連接器會(huì)監(jiān)聽(tīng)指定的端口,并把接受到的消息轉(zhuǎn)為HttpServletRequest和HttpServletResponse,交個(gè)Servlet容器處理。Tomcat的Servlet容器分為四種:Engin容器/Host容器/Context容器/Wrapper容器,這四個(gè)容器之間是父子關(guān)系,Engine容器包含Host容器,Host容器包含Context,Context包含Wrapper容器。本文會(huì)介紹Tomcat容器中的Engin容器和Host容器,在下一篇文章中會(huì)介紹Context容器和Wrapper容器。

      Container的作用

      Tomcat中的Container用于處理連接器處理好的Request和Response。Tomcat中的四種容器都繼承自Container接口,其中Engin容器全局只有一個(gè),是Container對(duì)外提供處理Request和Response的入口。Host容器是Engin容器的子容器,一個(gè)Engin容器可以包含多個(gè)Host容器,每個(gè)Host容器代表一個(gè)虛擬主機(jī)(下文會(huì)詳細(xì)介紹)。Engin容器在收到請(qǐng)求之后,會(huì)按照虛擬主機(jī)的配置將請(qǐng)求映射到對(duì)應(yīng)的Host容器之上。

      Container包含關(guān)系

      Container的結(jié)構(gòu)

      如下圖所示,Tomcat中的四種Container都有相同的結(jié)構(gòu),包含以下幾部分關(guān)鍵組件:請(qǐng)求處理閥門鏈PipeLine、基礎(chǔ)閥門BaseValve和日志組件等。

      1. PipeLine:用于流式加工處理請(qǐng)求中的信息,每個(gè)PipeLine中可以包含多個(gè)閥門Valve,每個(gè)Valve都有同樣的方法invoke(Request request,Response response)

          <valve classname="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
      1. BaseValve:基礎(chǔ)閥門,和Piple中的閥門的接口相同方法:invoke(Request request,Response response),但是作用和Piple中的閥門不同,主要用于將請(qǐng)求傳遞到下一個(gè)容器或者對(duì)應(yīng)的Servlet組件。

      2. 日志記錄器和生命周期管理等組其它組件,不具體介紹。

      Container容器結(jié)構(gòu)

      Engine容器

      Engine容器結(jié)構(gòu)

      如上圖所示,每個(gè)Tomcat僅僅有一個(gè)Engin容器,Tomcat中的連接器接受并解析消息之后,會(huì)把消息的轉(zhuǎn)給Engin容器,用戶可以給Engin容器的PipeLine添加各種自定義的Valve,Engin容器會(huì)將一一調(diào)用PipeLine中的Valve。Engin容器的BaseValve是StandardEngineValve,這個(gè)Valve會(huì)讀取Request中的Host信息,然后把請(qǐng)求路由給對(duì)應(yīng)的Host容器。

      final class StandardEngineValve extends ValveBase {
      
          public StandardEngineValve() {
              super(true);
          }
      
          @Override
          public final void invoke(Request request, Response response)
              throws IOException, ServletException {
      
              // Ignore some code here.
              // Select the Host to be used for this Request
              Host host = request.getHost();
              
              // Ignore some code here.
      
              // Ask this Host to process this request
              host.getPipeline().getFirst().invoke(request, response);
          }
      }

      Host容器

      Host容器是Engine容器的子容器,每個(gè)Host容器都是一個(gè)虛擬主機(jī),對(duì)應(yīng)于不同的域名。http協(xié)議從1.1開(kāi)始,支持在請(qǐng)求頭里面添加Host字段用來(lái)表示請(qǐng)求的域名。DNS域名解析的時(shí)候,可以將不同的域名解析到同一個(gè)ip或者主機(jī)。Engine容器的BaseValve會(huì)讀取Request中的Host,然后調(diào)用對(duì)應(yīng)Host容器的PipeLine去處理消息。

      Host路由原理

      什么是虛擬主機(jī)

      假如我們需要在一個(gè)tomcat里面同時(shí)支持三個(gè)域名:

      我們需要在server.xml文件里面的Engine標(biāo)簽下面添加多個(gè)Host標(biāo)簽,如下所示,其中name表示域名,appbase表示虛擬主機(jī)的目錄。當(dāng)我們?cè)跒g覽器輸入http://www.之后,相應(yīng)域名將請(qǐng)求到tomcat。tomcat通過(guò)讀取并搜索server.xml,找到www.對(duì)應(yīng)的虛擬主機(jī)Host,然后就使用查找到的Host來(lái)處理請(qǐng)求。


      在瀏覽器請(qǐng)求的時(shí)候,請(qǐng)求頭信息如下,這兒我們重點(diǎn)關(guān)注Host header。

      GET /appA/servletA/some-url HTTP/1.1 
      Host: www. 
      Proxy-Connection: keep-alive 
      User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11 
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9
      Accept-Encoding: gzip,deflate,sdch 
      Accept-Language: en-US,en;q=0.8

      Context容器

      Tomcat中一個(gè)Host容器可以包含多個(gè)Context容器,通常情況下一個(gè)Context容器標(biāo)識(shí)一個(gè)應(yīng)用,對(duì)應(yīng)于wabapp目錄下面的一個(gè)工程,在我的下一篇博客中會(huì)詳細(xì)介紹Context容器。

      本文最先發(fā)布至微信公眾號(hào)!

      www.
      www.
      www.

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多