<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • Tomcat環(huán)境怎么搭建

            這篇文章主要介紹“Tomcat環(huán)境怎么搭建”,在日常操作中,相信很多人在Tomcat環(huán)境怎么搭建問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Tomcat環(huán)境怎么搭建”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

            創(chuàng)新互聯(lián)建站專注于泰山網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供泰山營銷型網(wǎng)站建設(shè),泰山網(wǎng)站制作、泰山網(wǎng)頁設(shè)計、泰山網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造泰山網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供泰山網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

            No.1 搭建環(huán)境

            1.1、下載tomcat源碼

            進入tomcat官網(wǎng):https://tomcat.apache.org/ 下載對應(yīng)版本的源碼

            1.2、導(dǎo)入Eclipse

            • 新建一個Java項目

            • 將Tomcat源碼包中的java目錄下的文件拷貝到src目錄

            • 導(dǎo)入外部依賴包

            ant.jar ecj-4.4.jar jaxrpc.jar wsdl4j-1.5.2.jar

            No.2 Tomcat頂層結(jié)構(gòu)

            Tomcat環(huán)境怎么搭建

            上圖大概展示了tomcat的結(jié)構(gòu),主要包括如下幾個模塊:

            • Server:

            服務(wù)器的意思,代表整個tomcat服務(wù)器,一個tomcat只有一個Server;

            • Service:

            Server中的一個邏輯功能層,一個Server可以包含多個Service;

            • Connector:

            稱作連接器,是Service的核心組件之一,一個Service可以有多個Connector,主要是連接客戶端請求;

            • Container:

            Service的另一個核心組件,按照層級有Engine,Host,Context,Wrapper四種,一個Service只有一個Engine,其主要作用是執(zhí)行業(yè)務(wù)邏輯;

            • Jasper:

            JSP引擎;

            • Session:

            會話管理;

            No.3 Server

            Server是Tomcat最頂層的容器,代表著整個服務(wù)器,即一個Tomcat只有一個Server,Server中包含至少一個Service組件,用于提供具體服務(wù)。

            這個在配置文件中也得到很好的體現(xiàn)(port=”8005”  shutdown=”SHUTDOWN”是在8005端口監(jiān)聽到”SHUTDOWN”命令,服務(wù)器就會停止)。

            tomcat中定義了一個Server接口,其聲明如下:

            public interface Server extends Lifecycle {

            它繼承了Lifecycle接口,這樣當(dāng)調(diào)用start()和stop()方法時,所有已定義的Services也會啟動或停止。

            • 它的標(biāo)準(zhǔn)實現(xiàn)是:org.apache.catalina.core.StandardServer 類。

            • Server元素表示整個Catalina servlet容器。

            • 它的屬性代表整個servlet容器的特征。

            • 服務(wù)器可能包含一個或多個服務(wù),以及***命名資源集。

            • 它的具體實現(xiàn)應(yīng)該在其構(gòu)造函數(shù)中使用ServerFactory類注冊(singleton)實例。

            No.4 Service

            前面我們講過,一個Server至少包含一個Service組件來提供具體的服務(wù)。

            那Service的基本功能大致是接收客戶端的請求,然后解析請求,完成相應(yīng)的業(yè)務(wù)邏輯,然后把處理后的結(jié)果返回給客戶端。

            一般會提供兩個節(jié)本方法,一個start打開服務(wù)Socket連接,監(jiān)聽服務(wù)端口,一個stop停止服務(wù)釋放網(wǎng)絡(luò)資源。

            tomcat中定義一個Service接口,其聲明如下:

            public interface Service extends Lifecycle {
            • 一個Service是一組包含一個或多個Connectors,這些Connectors共享一個Container來處理請求。

            • Connector負責(zé)處理請求監(jiān)聽,Container負責(zé)處理請求處理

            • 從conf/server.xml文件的配置可以知道,Service相當(dāng)于Connector和Engine組件的包裝器,將一個或者多個Connector和一個Engine建立關(guān)聯(lián)關(guān)系。在默認的配置文件中,定義了一個叫Catalina  的服務(wù),它將HTTP/1.1和AJP/1.3這兩個Connector與一個名為Catalina 的Engine關(guān)聯(lián)起來。

            一個Server可以包含多個Service(它們相互獨立,只是公用一個JVM及類庫),一個Service負責(zé)維護多個Connector和一個Container。

            No.5 Connector

            Connector是連接器,用于接受請求并將請求封裝成Request和Response,然后交給Container進行處理,Container處理完之后在交給Connector返回給客戶端。

            server.xml默認配置了兩個Connector:

            • 監(jiān)聽端口8080,這個端口值可以修改,connectionTimeout定義了連接超時時間,單位是毫秒,redirectPort  定義了ssl的重定向接口,根據(jù)上述配置,Connector會將ssl請求轉(zhuǎn)發(fā)到8443端口。

            <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
            • 監(jiān)聽端口8009,AJP表示Apache Jserv Protocol,它將處理Tomcat和Apache  http服務(wù)器之間的交互,此連接器用于處理我們將Tomcat和Apache http服務(wù)器結(jié)合使用的情況,如在同一臺物理Server上部署一個Apache  http服務(wù)器和多臺Tomcat服務(wù)器,通過Apache服務(wù)器來處理靜態(tài)資源以及負載均衡時,針對不同的Tomcat實例需要AJP監(jiān)聽不同的端口。

            <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

            Connector在tomcat中的設(shè)計大致如下:

            Tomcat環(huán)境怎么搭建

            • Connector使用ProtocolHandler來處理請求的,不同的ProtocolHandler代表不同的連接類型

            • ProtocolHandler由包含了三個部件:Endpoint、Processor、Adapter

            Endpoint由于是處理底層的Socket網(wǎng)絡(luò)連接,因此Endpoint是用來實現(xiàn)TCP/IP協(xié)議的

            Processor用于將Endpoint接收到的Socket封裝成Request,Processor用來實現(xiàn)HTTP協(xié)議的

            Adapter充當(dāng)適配器,用于將Request轉(zhuǎn)換為ServletRequest交給Container進行具體的處理

            No.6 Container

            Container 用于封裝和管理 Servlet,以及具體處理 Request  請求,在Container內(nèi)部包含了4個子容器,4個子容器的作用分別是:

            • Engine:

            引擎,用來管理多個站點,一個Service最多只能有一個Engine;

            • Host:

            代表一個站點,也可以叫虛擬主機,通過配置Host就可以添加站點;

            • Context:

            代表一個應(yīng)用程序,對應(yīng)著平時開發(fā)的一套程序,或者一個WEB-INF目錄以及下面的web.xml文件;

            • Wrapper:

            每一Wrapper封裝著一個Servlet;


            No.7 tomcat啟動流程

            tomcat的啟動流程很標(biāo)準(zhǔn)化,入口是BootStrap,統(tǒng)一按照生命周期管理接口Lifecycle的定義進行啟動。

            首先,調(diào)用init()方法逐級初始化,接著調(diào)用start()方法進行啟動,同時,每次調(diào)用伴隨著生命周期狀態(tài)變更事件的觸發(fā)。

            • org.apache.catalina.startup.Bootstrap的程序入口main方法,具體實現(xiàn)如下:

            public static void main(String args[]) {          if (daemon == null) {             // Don't set daemon until init() has completed             Bootstrap bootstrap = new Bootstrap();             try {                 bootstrap.init();             } catch (Throwable t) {                 handleThrowable(t);                 t.printStackTrace();                 return;             }             daemon = bootstrap;         } else {             // When running as a service the call to stop will be on a new             // thread so make sure the correct class loader is used to prevent             // a range of class not found exceptions.             Thread.currentThread().setContextClassLoader(daemon.catalinaLoader);         }          try {             String command = "start";             if (args.length > 0) {                 command = args[args.length - 1];             }              if (command.equals("startd")) {                 args[args.length - 1] = "start";                 daemon.load(args);                 daemon.start();             } else if (command.equals("stopd")) {                 args[args.length - 1] = "stop";                 daemon.stop();             } else if (command.equals("start")) {                 daemon.setAwait(true);                 daemon.load(args);                 daemon.start();             } else if (command.equals("stop")) {                 daemon.stopServer(args);             } else if (command.equals("configtest")) {                 daemon.load(args);                 if (null==daemon.getServer()) {                     System.exit(1);                 }                 System.exit(0);             } else {                 log.warn("Bootstrap: command \"" + command + "\" does not exist.");             }         } catch (Throwable t) {             // Unwrap the Exception for clearer error reporting             if (t instanceof InvocationTargetException &&                     t.getCause() != null) {                 t = t.getCause();             }             handleThrowable(t);             t.printStackTrace();             System.exit(1);         }  }
            • org.apache.catalina.startup.Bootstrap的初始化方法,具體實現(xiàn)如下:

            public void init() throws Exception  {         // 1、設(shè)置catalina.home的配置:將catalina.home系統(tǒng)屬性設(shè)置為當(dāng)前工作目錄(如果尚未設(shè)置)。         setCatalinaHome();     // 2、設(shè)置catalina.base的配置:如果沒有設(shè)置的話,將當(dāng)前的工作目錄為了catalina.base的設(shè)置         setCatalinaBase();     // 3、初始化類加載器:commonLoader、catalinaLoader、sharedLoader         initClassLoaders();          Thread.currentThread().setContextClassLoader(catalinaLoader);          SecurityClassLoad.securityClassLoad(catalinaLoader);          // 加載我們的啟動類并調(diào)用其process()方法         if (log.isDebugEnabled())             log.debug("Loading startup class");     //4、加載啟動類         Class<?> startupClass = catalinaLoader.loadClass("org.apache.catalina.startup.Catalina");         //5、實例化啟動類     Object startupInstance = startupClass.newInstance();          if (log.isDebugEnabled())             log.debug("Setting startup class properties");      //6、設(shè)置方法參數(shù)     String methodName = "setParentClassLoader";         Class<?> paramTypes[] = new Class[1];         paramTypes[0] = Class.forName("java.lang.ClassLoader");         Object paramValues[] = new Object[1];         paramValues[0] = sharedLoader;         Method method = startupInstance.getClass().getMethod(methodName, paramTypes);     // 7、調(diào)用啟動類的setParentClassLoader方法設(shè)置共享擴展類加載器         method.invoke(startupInstance, paramValues);          catalinaDaemon = startupInstance;  }
            • org.apache.catalina.startup.Bootstrap的start()方法,具體實現(xiàn)如下:

            /** * Start the Catalina daemon. */ public void start() throws Exception {     // 如果啟動類為實例化,則調(diào)用init()方法     if( catalinaDaemon==null ) init();      //獲取啟動類的start方法     Method method = catalinaDaemon.getClass().getMethod("start", (Class [] )null);     //調(diào)用啟動類的start方法,即調(diào)用org.apache.catalina.startup.Catalina的start()方法     method.invoke(catalinaDaemon, (Object [])null);  }

            到此,關(guān)于“Tomcat環(huán)境怎么搭建”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

            當(dāng)前名稱:Tomcat環(huán)境怎么搭建
            網(wǎng)頁鏈接:http://www.jbt999.com/article48/jhdiep.html

            成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司App設(shè)計電子商務(wù)網(wǎng)站改版品牌網(wǎng)站制作面包屑導(dǎo)航

            廣告

            聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

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

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 逼逼视频| 人妻互换一区二区三区 | 精品成人无码久久久久久 | 日韩精品人妻一区二区 | 久久国产精品99久久人人澡 |