Tomcat是一個java的web容器,Tomcat是實現了javaEE當中的Servlet和JSP規範的一個容器。Tomcat通常用於動態請求的處理(Servlet)。Tomcat採用組件的方式去設計(面向組件)。總體的功能是經過組件的方式去拼裝的。而且每個組件均可以進行替換保證了它的一個靈活性。看到下圖: java
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
最頂層的是 Server,而後是 Service( Service能夠有多個,通常狀況下只配置一個),一個 Service裏面能夠支持多個 Connector,一個 Service裏面只能由惟一的一個 Engine, Engine裏面能夠包含多個 Host, Host能夠包含多個 Context。一、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。
一、複製WAR包到Tomcat的webapps文件夾下;
二、執行starup.bat(startup.sh)腳本啓動;
三、在啓動過程當中會自動將war包解壓裝載。
可是在咱們平時開發的時候是直接在Eclipse或IDEA中啓動WEB項目的,不會把將項目打包,而後將war包複製到Tomcat的webapps目錄下再執行starup.bat(startup.sh)腳本的。
咱們在Eclipse或IDEA中啓動WEB項目的時候實際上是在Tomcat程序文件以外建立了一個部署目錄,在通常的生產環境中也是這麼作的 即:Tomcat程序目錄和部署目錄分開 。咱們在只須要在啓動時指定CATALINA_HOME 與 CATALINA_BASE 參數便可實現。
一、下載並解壓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在A目錄,全部的應用在B目錄,B目錄中的全部的應用是指向Tomcat的,當Tomcat要進行升級的時候,我只須要把Tomcat所在的A目錄升級了就能夠了,而不須要一點一點的去升級全部的配置了。二、我在每個應用程序內新建了一個logs文件夾,咱們的日誌文件是獨立的不會和其它項目混淆在一塊兒。
三、咱們的配置文件conf也是獨立的。各應用之間互不影響,靈活性高。