最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Tomcat架構(gòu)設(shè)計(jì)及Servlet作用規(guī)范講解

 更新時間:2022年08月18日 16:33:56   作者:請叫我黃同學(xué)  
這篇文章主要為大家介紹了Tomcat架構(gòu)設(shè)計(jì)及Servlet作用規(guī)范講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

1.Servlet規(guī)范

1.1 Servlet作用講解

Servlet是JavaEE規(guī)范中的一種,主要是為了擴(kuò)展Java作為Web服務(wù)的功能,統(tǒng)一定義了對應(yīng)的接口,比如Servlet接口,HttpRequest接口,HttpResponse接口,F(xiàn)ilter接口。

然后由具體的服務(wù)廠商來實(shí)現(xiàn)這些接口功能,比如Tomcat,jetty等。

在規(guī)范里面并不會有具體的實(shí)現(xiàn)。

可以自行看下源碼,而在Servlet規(guī)范中規(guī)定了一個http請求到來的執(zhí)行處理流程:

對應(yīng)的服務(wù)器容器會接收到對應(yīng)的Http請求,然后解析該請求,然后創(chuàng)建對應(yīng)的Servlet實(shí)例,調(diào)用對應(yīng)init方法來完成初始化,把請求的相關(guān)信息封裝為HttpServletRequest對象來調(diào)用Servlet的service方法來處理請求,然后通過HttpServletResponse封裝響應(yīng)的信息交給容器,響應(yīng)給客戶端。

1.2 Servlet核心API

我們再來回顧下Servlet中的核心API,這塊對我們更好的掌握Tomcat的內(nèi)容還是非常有幫助的。

API描述
ServletConfig獲取servlet初始化參數(shù)和servletContext對象。
ServletContext在整個Web應(yīng)用的動態(tài)資源之間共享數(shù)據(jù)。
ServletRequest封裝Http請求信息,在請求時創(chuàng)建。
ServletResponse封裝Http響應(yīng)信息,在請求時創(chuàng)建。

ServletConfig

容器在初始化servlet時,為該servlet創(chuàng)建一個servletConfig對象,并將這個對象通過init()方法來傳遞并保存在此Servlet對象中。核心作用:

  • 獲取初始化信息;
  • 獲取ServletContext對象。

ServletContext

一個項(xiàng)目只有一個ServletContext對象,可以在多個Servlet中來獲取這個對象,使用它可以給多個Servlet傳遞數(shù)據(jù),該對象在Tomcat啟動時就創(chuàng)建,在Tomcat關(guān)閉時才會銷毀!作用是在整個Web應(yīng)用的動態(tài)資源之間共享數(shù)據(jù)。

在實(shí)際的Servlet開發(fā)中,我們會實(shí)現(xiàn)HttpServlet接口,在該接口中會實(shí)現(xiàn)GenericServlet,而在GenericServlet會實(shí)現(xiàn)ServiceConfig接口,從而可以獲取ServletContext容器對象

所以在Servlet中我們可以很容易的獲取到ServletContext對象,從而完成對應(yīng)的操作。

public class ServletTwoImpl extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        // 1、參數(shù)傳遞
        ServletContext servletContext = this.getServletContext() ;
        String value = String.valueOf(servletContext.getAttribute("name")) ;
        System.out.println("value="+value);
        // 2、獲取初始化參數(shù)
        String userName= servletContext.getInitParameter("user-name") ;
        System.out.println("userName="+userName);
        // 3、獲取應(yīng)用信息
        String servletContextName = servletContext.getServletContextName() ;
        System.out.println("servletContextName="+servletContextName);
        // 4、獲取路徑
        String pathOne = servletContext.getRealPath("/") ;
        String pathTwo = servletContext.getRealPath("/WEB-INF/") ;
        System.out.println("pathOne="+pathOne+";pathTwo="+pathTwo);
        response.getWriter().print("執(zhí)行:doGet; value:"+value);
    }
}

1.3 ServletRequest

HttpServletRequest接口繼承ServletRequest接口,用于封裝請求信息,該對象在用戶每次請求servlet時創(chuàng)建并傳入servlet的service()方法,在該方法中,傳入的servletRequest將會被強(qiáng)制轉(zhuǎn)化為HttpservletRequest 對象來進(jìn)行HTTP請求信息的處理。核心作用:

  • 獲取請求報(bào)文信息;
  • 獲取網(wǎng)絡(luò)連接信息;
  • 獲取請求域?qū)傩孕畔ⅰ?/li>

1.4 ServletResponse

HttpServletResponse繼承自ServletResponse,封裝了Http響應(yīng)信息。客戶端每個請求,服務(wù)器都會創(chuàng)建一個response對象,并傳入給Servlet.service()方法。核心作用:

  • 設(shè)置響應(yīng)頭信息;
  • 發(fā)送狀態(tài)碼;
  • 設(shè)置響應(yīng)正文;
  • 重定向;

2.Tomcat的設(shè)計(jì)

通過上面Servlet規(guī)范的介紹,其實(shí)我們發(fā)下我們要實(shí)現(xiàn)Servlet規(guī)范的話,很重要的就得提供一個服務(wù)容器來獲取請求,解析封裝數(shù)據(jù),并調(diào)用Servlet實(shí)例相關(guān)的方法。也就是如下圖中的部分

這塊的內(nèi)容其實(shí)就是Tomcat,具體的我們來看看。

2.1 什么是Tomcat

Tomcat是一個容器,用于承載Servlet,那么我們說Tomcat就是一個實(shí)現(xiàn)了部分J2EE規(guī)范的服務(wù)器。J2 EE和Jakarta EE(Eclipse基金會)這兩是啥?用于Tomcat10以后都是Jakarta EE,而9之前就是J2EE.

2.2 Tomcat的架構(gòu)結(jié)構(gòu)

我們通過上面的分析,知道Tomcat是一個Servlet規(guī)范的實(shí)現(xiàn),要接收請求和響應(yīng)請求,那么具體是如何實(shí)現(xiàn)的呢?這塊我們可以通過conf下的server.xml得出對應(yīng)的結(jié)論。

server.xml是Tomcat中最重要的配置文件,server.xml 的每一個元素都對應(yīng)了Tomcat 中的一個組件 ;通過對xml文件中元素的配置,可以實(shí)現(xiàn)對Tomcat中各個組件的控制。因此,學(xué)習(xí)server.xml文件的配置,對于了解和使用Tomcat至關(guān)重要.

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <!-- This Realm uses the UserDatabase configured in the global JNDI
             resources under the key "UserDatabase".  Any edits
             that are performed against this UserDatabase are immediately
             available for use by the Realm.  -->
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

極簡模式

<Server>
    <Service>
        <Connector />
        <Connector />
        <Engine>
            <Host>
                <Context /><!-- 現(xiàn)在常常使用自動部署,不推薦配置Context元素,Context小節(jié)有詳細(xì)說明 -->
            </Host>
        </Engine>
    </Service>
</Server>

梳理出的結(jié)構(gòu)

對應(yīng)的每個組件的作用。

2.3 組件分類

官網(wǎng)其實(shí)對上面的組件也做了分類:

頂級元素:

  • Server:是整個配置文件的根元素
  • Service:代表一個Engine元素以及一組與之相連的Connector元素

連接器

  • 代表了外部客戶端發(fā)送請求到特定Service的接口;同時也是外部客戶端從特定Service接收響應(yīng)的接口。

容器

容器的作用是處理Connector接收進(jìn)來的請求,并產(chǎn)生對應(yīng)的響應(yīng),Engine,Host和Context都是容器,他們不是平行關(guān)系,而是父子關(guān)系。

每個組件的作用:

  • Engine:可以處理所有請求
  • Host:可以處理發(fā)向一個特定虛擬主機(jī)的所有請求
  • Context:可以處理一個特定Web應(yīng)用的所有請求

核心組件的串聯(lián)關(guān)系

當(dāng)客戶端請求發(fā)送過來后其實(shí)是通過這些組件相互之間配合完成了對應(yīng)的操作。

  • Server元素在最頂層,代表整個Tomcat容器;一個Server元素中可以有一個或多個Service元素
  • Service在Connector和Engine外面包了一層,把它們組裝在一起,對外提供服務(wù)。一個Service可以包含多個Connector,但是只能包含一個Engine;Connector接收請求,Engine處理請求。
  • Engine、Host和Context都是容器,且Engine包含Host,Host包含Context。每個Host組件代表Engine中的一個虛擬主機(jī);每個Context組件代表在特定Host上運(yùn)行的一個Web應(yīng)用.

整體Tomcat的運(yùn)行架構(gòu)圖

以上就是Tomcat架構(gòu)設(shè)計(jì)及Servlet作用規(guī)范講解的詳細(xì)內(nèi)容,更多關(guān)于Tomcat架構(gòu)設(shè)計(jì)Servlet規(guī)范的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • eclipse配置Tomcat找不到server選項(xiàng)的解決辦法

    eclipse配置Tomcat找不到server選項(xiàng)的解決辦法

    這篇文章通過圖文并茂的形式給大家介紹eclipse配置Tomcat找不到server選項(xiàng)的解決辦法,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • 解析Tomcat架構(gòu)原理到架構(gòu)設(shè)計(jì)

    解析Tomcat架構(gòu)原理到架構(gòu)設(shè)計(jì)

    一般學(xué)習(xí)的時候也是先總覽一下整體,然后逐個部分個個擊破,最后形成思路,了解具體細(xì)節(jié),Tomcat的結(jié)構(gòu)很復(fù)雜,但是Tomcat非常的模塊化,找到了Tomcat最核心的模塊,問題才可以游刃而解,了解了Tomcat的整體架構(gòu)對以后深入了解Tomcat來說至關(guān)重要
    2021-06-06
  • Windows下搭建Tomcat HTTP服務(wù)并發(fā)布外網(wǎng)遠(yuǎn)程訪問

    Windows下搭建Tomcat HTTP服務(wù)并發(fā)布外網(wǎng)遠(yuǎn)程訪問

    本文主要介紹了Windows下搭建Tomcat HTTP服務(wù)并發(fā)布外網(wǎng)遠(yuǎn)程訪問,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • tomcat同時使用http和https訪問的配置方法

    tomcat同時使用http和https訪問的配置方法

    這篇文章主要介紹了tomcat同時使用http和https訪問的配置方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Tomcat配置HTTPS訪問的實(shí)現(xiàn)步驟

    Tomcat配置HTTPS訪問的實(shí)現(xiàn)步驟

    本文主要介紹了Tomcat配置HTTPS訪問的實(shí)現(xiàn)步驟,在tomcat中存在兩種證書驗(yàn)證情況單向驗(yàn)證和雙向驗(yàn)證,下面就詳細(xì)的介紹一下這兩種情況的配置,感興趣的可以了解一下
    2022-07-07
  • Tomcat服務(wù)器入門超詳細(xì)教程

    Tomcat服務(wù)器入門超詳細(xì)教程

    Tomcat 服務(wù)器是一個免費(fèi)的開放源代碼的Web 應(yīng)用服務(wù)器,屬于輕量級應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調(diào)試JSP 程序的首選,這篇文章主要介紹了Tomcat服務(wù)器入門超詳細(xì)教程,需要的朋友可以參考下
    2021-11-11
  • Tomcat安全設(shè)置 win2003 下tomcat權(quán)限限制

    Tomcat安全設(shè)置 win2003 下tomcat權(quán)限限制

    Tomcat安全設(shè)置 win2003 下tomcat權(quán)限限制,需要的朋友可以參考下。
    2011-03-03
  • 傳統(tǒng)tomcat啟動服務(wù)與springboot啟動內(nèi)置tomcat服務(wù)的區(qū)別(推薦)

    傳統(tǒng)tomcat啟動服務(wù)與springboot啟動內(nèi)置tomcat服務(wù)的區(qū)別(推薦)

    這篇文章主要介紹了傳統(tǒng)tomcat啟動服務(wù)與springboot啟動內(nèi)置tomcat服務(wù)的區(qū)別,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • 學(xué)習(xí)javaweb如何配置Tomcat的熱啟動

    學(xué)習(xí)javaweb如何配置Tomcat的熱啟動

    學(xué)習(xí)javaweb的時候每次更改項(xiàng)目都需要重新部署項(xiàng)目,如此一來比較麻煩,使用tomcat的熱啟動就可以解決這個問題
    2014-09-09
  • 從連接器組件看Tomcat的線程模型——BIO模式(推薦)

    從連接器組件看Tomcat的線程模型——BIO模式(推薦)

    這篇文章主要介紹了從連接器組件看Tomcat的線程模型——BIO模式,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07

最新評論

瓦房店市| 连州市| 通渭县| 米泉市| 武宁县| 彭水| 南靖县| 英山县| 西昌市| 镇坪县| 赤水市| 大渡口区| 丰顺县| 大邑县| 广丰县| 道孚县| 拉孜县| 阳西县| 新丰县| 内黄县| 澎湖县| 克拉玛依市| 乌拉特前旗| 吐鲁番市| 永靖县| 华坪县| 石台县| 安龙县| 泰兴市| 福贡县| 芮城县| 永州市| 疏勒县| 岑溪市| 芷江| 汶上县| 成安县| 醴陵市| 江阴市| 衡阳市| 墨竹工卡县|