認識Tomcat核心組件及其啓動參數

認識Tomcat及其核心組件

  Tomcat是一個java的web容器,Tomcat是實現了javaEE當中的Servlet和JSP規範的一個容器。Tomcat通常用於動態請求的處理(Servlet)。Tomcat採用組件的方式去設計(面向組件)。總體的功能是經過組件的方式去拼裝的。而且每個組件均可以進行替換保證了它的一個靈活性。看到下圖: java

Tomcat
   Server 和 Service組件: Tomcat的一個服務器(Server)和Tomcat的服務(Service Tomcat-standalone),主要做用是將鏈接器(Connector)和引擎(Engine)關聯;

  鏈接器(Connector): 鏈接器幫助咱們把客戶端裏面的請求鏈接到咱們Tomcat的服務。Tomcat能夠配置多個鏈接器。在這個鏈接器中能夠指定Service和外部通訊的一個協議(HTTP 1.一、HTTPS、AJP: apache 私有協議,用於apache 反向代理Tomcat)。web

  容器組件(Container ): 容器組件包含引擎(Engine,默認的引擎叫catalina)、虛擬機(Host)、Context。apache

  Engine主要的做用是將協議解析並轉換成request傳給虛擬機。tomcat

  虛擬機(Host) 基於域名分發請求(能夠配置多個虛擬機)。bash

  Context隔離每一個WEB應用,每個Context的ClassLoader都是獨立的(Tomcat的webapps目錄下有一個ROOT文件夾表明的是根路徑)。服務器

  Tomcat還有一些其它組件,像logger日誌管理器、loader載入器、pipeline管道等。這些組件都是內嵌的組件。app

組件之間的組成關係

  咱們知道Tomcat裏面有哪些組件了,那這些組件的組成關係怎樣呢?看下圖: curl

Tomcat組件之間的組成關係
  最頂層的是 Server,而後是 ServiceService能夠有多個,通常狀況下只配置一個),一個 Service裏面能夠支持多個 Connector,一個 Service裏面只能由惟一的一個 EngineEngine裏面能夠包含多個 HostHost能夠包含多個 Context

Tomcat啓動參數的說明

Tomcat的主要啓動參數

  一、JAVA_OPTS: jvm 啓動參數 , 設置內存 編碼等 -Xms100m -Xmx200m -Dfile.encoding=UTF-8;webapp

  二、JAVA_HOME: 指定jdk 目錄,若是未設置從java 環境變量當中去找;jvm

  三、CATALINA_HOME: Tomcat 程序的根目錄;

  四、CATALINA_BASE: 應用部署目錄,默認爲CATALINA_HOME;

  五、CATALINA_OUT: 應用日誌輸出目錄,默認爲CATALINA_BASE;

  六、CATALINA_TMPDIR: 應用臨時目錄,默認爲CATALINA_BASE/temp。

平時啓動Tomcat的過程

  一、複製WAR包到Tomcat的webapps文件夾下;

  二、執行starup.bat(startup.sh)腳本啓動;

  三、在啓動過程當中會自動將war包解壓裝載。

  可是在咱們平時開發的時候是直接在Eclipse或IDEA中啓動WEB項目的,不會把將項目打包,而後將war包複製到Tomcat的webapps目錄下再執行starup.bat(startup.sh)腳本的。

  咱們在Eclipse或IDEA中啓動WEB項目的時候實際上是在Tomcat程序文件以外建立了一個部署目錄,在通常的生產環境中也是這麼作的 即:Tomcat程序目錄和部署目錄分開 。咱們在只須要在啓動時指定CATALINA_HOMECATALINA_BASE 參數便可實現。

演示Tomcat程序目錄和部署目錄分開

  一、下載並解壓Tomcat

  二、建立apps目錄,在apps下建立test-web,test-web下新建一個logs目錄。

  三、將Tomcat目錄下的conf和webapps兩個目錄拷貝一份到test-web。

  四、建立並編寫腳本:tomcat.sh

#!/bin/bash 
#####設置jvm內存,最小內存和最大內存
export JAVA_OPTS="-Xms100m -Xmx200m"	
#####指定JDK目錄
export JAVA_HOME=/usr/local/java
#####對應的Tomcat的目錄
export CATALINA_HOME=/usr/local/apache-tomcat-8.5.34
##### pwd:當前腳本所在目錄
export CATALINA_BASE="`pwd`"
##### 接收一個參數,這個參數包含start、stop、restart、version和configtest
##### start:執行catalina.sh腳本
##### stop:關閉catalina.sh腳本
##### restart:重啓catalina.sh腳本
##### version:查看版本號
##### configtest:查看配置是否正確
case $1 in
        start)
        $CATALINA_HOME/bin/catalina.sh start
                echo start success!!
        ;;
        stop)
                $CATALINA_HOME/bin/catalina.sh stop
                echo stop success!!
        ;;
        restart)
        $CATALINA_HOME/bin/catalina.sh stop
                echo stop success!!
                sleep 2
        $CATALINA_HOME/bin/catalina.sh start
        echo start success!!
        ;;
        version)
        $CATALINA_HOME/bin/catalina.sh version
        ;;
        configtest)
        $CATALINA_HOME/bin/catalina.sh configtest
        ;;
        esac
exit 0
複製代碼

  五、在test-web目錄下執行./tomcat.sh start命令啓動Tomcat,打印出的日誌最後一行爲start success!!即啓動成功

  六、執行curl 127.0.0.1:8080,日誌打印出webapps/ROOT/index.jsp文件的內容則訪問成功。

  這樣就能夠將應用程序和Tomcat的部署目錄進行分離。那這樣有什麼好處呢?看下圖:

Tomcat
  一、看上圖所知:個人Tomcat在A目錄,全部的應用在B目錄,B目錄中的全部的應用是指向Tomcat的,當Tomcat要進行升級的時候,我只須要把Tomcat所在的A目錄升級了就能夠了,而不須要一點一點的去升級全部的配置了。

  二、我在每個應用程序內新建了一個logs文件夾,咱們的日誌文件是獨立的不會和其它項目混淆在一塊兒。

  三、咱們的配置文件conf也是獨立的。各應用之間互不影響,靈活性高。

相關文章
相關標籤/搜索