久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:229日期:2023-03-19 16:51:53
目錄
  • 1.Servlet規(guī)范
    • 1.1 Servlet作用講解
    • 1.2 Servlet核心API
    • 1.3 ServletRequest
    • 1.4 ServletResponse
  • 2.Tomcat的設(shè)計(jì)
    • 2.1 什么是Tomcat
    • 2.2 Tomcat的架構(gòu)結(jié)構(gòu)
    • 2.3 組件分類

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ī)范里面并不會(huì)有具體的實(shí)現(xiàn)。

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

對應(yīng)的服務(wù)器容器會(huì)接收到對應(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在整個(gè)Web應(yīng)用的動(dòng)態(tài)資源之間共享數(shù)據(jù)。ServletRequest封裝Http請求信息,在請求時(shí)創(chuàng)建。ServletResponse封裝Http響應(yīng)信息,在請求時(shí)創(chuàng)建。

ServletConfig

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

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

ServletContext

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

在實(shí)際的Servlet開發(fā)中,我們會(huì)實(shí)現(xiàn)HttpServlet接口,在該接口中會(huì)實(shí)現(xiàn)GenericServlet,而在GenericServlet會(huì)實(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時(shí)創(chuàng)建并傳入servlet的service()方法,在該方法中,傳入的servletRequest將會(huì)被強(qiáng)制轉(zhuǎn)化為HttpservletRequest 對象來進(jìn)行HTTP請求信息的處理。核心作用:

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

1.4 ServletResponse

HttpServletResponse繼承自ServletResponse,封裝了Http響應(yīng)信息。客戶端每個(gè)請求,服務(wù)器都會(huì)創(chuàng)建一個(gè)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ī)范的話,很重要的就得提供一個(gè)服務(wù)容器來獲取請求,解析封裝數(shù)據(jù),并調(diào)用Servlet實(shí)例相關(guān)的方法。也就是如下圖中的部分

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

2.1 什么是Tomcat

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

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

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

server.xml是Tomcat中最重要的配置文件,server.xml 的每一個(gè)元素都對應(yīng)了Tomcat 中的一個(gè)組件 ;通過對xml文件中元素的配置,可以實(shí)現(xiàn)對Tomcat中各個(gè)組件的控制。因此,學(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)在常常使用自動(dòng)部署,不推薦配置Context元素,Context小節(jié)有詳細(xì)說明 -->    </Host></Engine>    </Service></Server>

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

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

2.3 組件分類

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

頂級元素:

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

連接器

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

容器

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

每個(gè)組件的作用:

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

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

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

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

標(biāo)簽: Tomcat
主站蜘蛛池模板: 日韩免费视频一区二区 | 亚洲欧美激情在线 | 国产精品久久久久久久久 | 久久国产精品一区二区 | 国产一区二区三区四区五区 | 久久精品91久久久久久再现 | 欧美一级视频在线观看 | 国产精品美女久久久久久久网站 | 91在线电影| 欧美日韩不卡合集视频 | 有码一区| 成人精品一区二区 | 亚洲精品不卡 | 欧洲成人午夜免费大片 | 美女天堂 | 国产欧美综合一区二区三区 | 久久国产精品免费一区二区三区 | 欧美精品网站 | 91高清在线 | 欧美一区在线视频 | caoporn国产精品免费公开 | 韩日av在线 | 亚洲伊人久久综合 | 欧美日韩精品一区二区三区 | 中文一区 | 久久久久一区二区三区 | 国产精品久久久久久久久久99 | 有码在线 | 毛片国产 | 国产精品久久久久久久久久久免费看 | a欧美| a国产精品 | 91精品麻豆日日躁夜夜躁 | 国产精品综合 | 午夜一级黄色片 | 亚洲国产成人在线 | 久久中文视频 | h片在线看| 91精品国产综合久久婷婷香蕉 | 99国产精品久久久久久久成人热 | 欧美在线观看一区 |