Tomcat 是一個開源的(遵循 Apache 2.0 協(xié)議)輕量級 Web 應(yīng)用服務(wù)器中間件,在中小型系統(tǒng)和并發(fā)量小的場景中普遍使用,是開發(fā)和調(diào)試 Servlet 和 JSP 程序的首選中間件。
本方案基于CentOS8系統(tǒng)設(shè)計,建議在RedHat/CentOS系統(tǒng)中使用。
1.安裝 Tomcat 中間件
注意:安裝 Tomcat 前,應(yīng)確保系統(tǒng)已經(jīng)正確安裝配置 JDK 。如何安裝配置 JDK,請閱讀文件《RedHat/CentOS8 安裝配置 OracleJDK 8 和 OpenJDK 1.8》【http://www.itdecent.cn/p/208cc5b8688b】
第一步,打開 Tomcat 官方網(wǎng)站下載頁面【https://tomcat.apache.org/download-90.cgi】,下載 Tomcat 的編譯程序 tar 包到用戶主目錄中。

第二步,解壓縮編譯程序 tar 包到"/usr/local"目錄中。
[centos@host ~]$ sudo tar zxvf apache-tomcat-9.0.34.tar.gz -C /usr/local
[centos@host ~]$ sudo mv /usr/local/apache-tomcat-9.0.34 /usr/local/tomcat-9.0.34
第三步,創(chuàng)建 Tomcat 管理用戶和組,并設(shè)置為程序安裝目錄的擁有者。
[centos@host ~ ]$ sudo id tomcat
id: “tomcat”:無此用戶
[centos@host ~ ]$ sudo groupadd tomcat
[centos@host ~ ]$ sudo useradd -g tomcat -s /bin/false tomcat
[centos@host ~ ]$ sudo chown -R tomcat:tomcat /usr/local/tomcat-9.0.34
第四步,創(chuàng)建 Tomcat 開機啟動服務(wù)配置文件。
使用文本編輯器打開配置文件:
[centos@host ~]$ sudo gedit /usr/lib/systemd/system/tomcat.service
修改或驗證文件中的以下參數(shù)并保存:
[Unit]
Description=Tomcat Server
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment=JAVA_HOME=/usr/local/jdk1.8.0_261
Environment=JRE_HOME=/usr/local/jdk1.8.0_261/jre
ExecStart=/usr/local/tomcat-9.0.34/bin/startup.sh
ExecStop=/usr/local/tomcat-9.0.34/bin/shutdown.sh
ExecReload=/usr/local/tomcat-9.0.34/bin/shutdown.sh
第五步,啟動 Tomcat 服務(wù),并設(shè)置為開機自動啟動。
[centos@host ~]$ sudo systemctl daemon-reload
[centos@host ~]$ sudo systemctl enable tomcat.service
[centos@host ~]$ sudo systemctl start tomcat.service
第六步,設(shè)置防火墻端口(CentOS8默認安裝firewall防火墻),允許"8080"端口(Tomcat 默認端口)訪問服務(wù)器。
[centos@host ~]$ sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
[centos@host ~]$ sudo firewall-cmd --reload
第七步,驗證安裝,在瀏覽器中輸入"http://127.0.0.1:8080"來訪問 Tomcat 默認主頁。

2.Tomcat 主配置文件詳解
Tomcat 的主配置文件是 "/程序安裝目錄/conf/server.xml",該文件定義了 Tomcat 的監(jiān)聽服務(wù),站點,虛擬目錄信息。
Tomcat 的主配置文件結(jié)構(gòu)如下:
<Server>
<Listener />
<GlobaNamingResources></GlobaNamingResources>
<Service>
<Connector />
<Engine>
<Realm />
<host>
<Context />
<Value />
</host>
</Engine>
</Service>
</Server>
Server(服務(wù)器)節(jié)點:Server 定義了一個提供完整的JVM的獨立組件,服務(wù)器在指定的端口上監(jiān)聽shutdown命令。 Server 代表根容器,它是唯一的,且不能做為任何元素的子元素。屬性如下:
-- port:指定監(jiān)聽 shutdown 命令端口,終止 Tomcat 時需要在服務(wù)器上發(fā)出 shutdown 命令,必須設(shè)置。
-- shutdown:指定終止 Tomcat 時,發(fā)給服務(wù)器的 shutdown 監(jiān)聽端口的字符串,必須設(shè)置。Service(服務(wù))節(jié)點:Service 定義了一個或多個 Connectors 共享一個 Engine 的組合。 Server 可以包含一個或多個 Service 。
-- name:指定 Service 的名字。Connector(連接器)節(jié)點: Connector 定義請求被接收和應(yīng)答所需要的端口。每個 Connector 通過共享的 Engine 處理請求。
-- port:指定服務(wù)器端創(chuàng)建的端口號,這個端口監(jiān)聽來自客戶端的請求。
-- protocol:指定 HTTP 協(xié)議。
-- redirectPort:指定服務(wù)器正在處理 HTTP 請求時收到了一個 SSL 傳輸請求后重定向的端口號。
-- connectionTimeout:指定超時的時間數(shù)(以毫秒為單位)。Engine(引擎)節(jié)點:Engine 定義處理每個請求的入口點。每個 Service 只能有一個 Engine,處理所有 Connector 接收到的客戶請求。每個 Engine 可以包含一個或多個 Host 。
-- name:指定 Engine 的名字。
-- defaultHost:指定默認 Host 的名字。Host(主機)節(jié)點:Host 定義虛擬主機,它包含了一個或多個 Web 應(yīng)用。
-- name:指定 Host 的名字。
-- appBase:應(yīng)用程序基本目錄,即存放應(yīng)用程序(WAR 文件)的目錄。
-- unpackWARs:指定為"true",則自動將WAR文件解壓;指定為"false",則不解壓直接從WAR文件中運行應(yīng)用程序。
-- autoDeploy:指定為"true",在 Tomcat 服務(wù)處于運行狀態(tài)時,能夠自動監(jiān)測 appBase 下的 Web 應(yīng)用,如果發(fā)現(xiàn)新的 Web 應(yīng)用會自運發(fā)布這個 Web 應(yīng)用;指定為"false",則不自動檢測。Context(應(yīng)用程序)節(jié)點:Context 定義單個 Web 應(yīng)用程序,每個 Host 可以包含一個或多個 Context 。
-- docBase:指定應(yīng)用程序(WAR 文件)的物理目錄。
-- path:指定應(yīng)用程序的虛擬目錄。 URL 請求的形式是"http://IP:PORT/虛擬目錄"。
-- debug:指定輸出的調(diào)試信息,允許設(shè)置"0-9","0"表示提供最少的信息,"9"表示提供最多的信息。
-- reloadable:指定為"true",則 Tomcat 會自動檢測應(yīng)用程序的"/WEB-INF/lib"和 "/WEB-INF/classes"目錄的更新,自動裝載新的應(yīng)用程序;指定為"false",則不會。Value(日志)節(jié)點:定義調(diào)試和錯誤信息。
-- className:指定實現(xiàn)類,默認是"org.apache.catalina.valves.AccessLogValve",用于記錄應(yīng)用程序的訪問信息。
-- directory:指定日志文件存放的位置。
-- prefix:指定日志文件名的前綴。
-- suffix:指定日志文件名的后綴。
-- pattern:指定日志文件記錄的內(nèi)容和格式,通過通配符腳本表示。Realm(認證)節(jié)點:Realm 定義存放用戶名,密碼及角色的數(shù)據(jù)庫。
-- className:指定實現(xiàn)類。
3.使用 Ecplise 發(fā)布 WAR 包
第一步,在需要發(fā)布的項目上右擊,選擇"Export..."。

第二步,選擇"Web"下的"WAR file"選項,點擊"Next>"按鈕。

第三步,點擊"Browse"按鈕,設(shè)置 WAR 文件存放位置。

第四步,設(shè)置 WAR 包文件部署的服務(wù)器運行環(huán)境,如:Tomcat;設(shè)置是否將源文件一并導(dǎo)出到 WAR 文件中(不選擇則只導(dǎo)出編譯文件,不建議選擇),點擊“Finish”按鈕等待導(dǎo)出進度完成。

4.在 Tomcat 中部署 WAR 包
方案一:在默認站點中的應(yīng)用程序目錄中部署。(最簡部署)
將已發(fā)布的 WAR 文件拷貝到"/程序安裝目錄/webapps"目錄中即可,Tomcat 會自動檢測部署,用戶通過"http://ip:port/WAR文件名"即可訪問,默認的端口是8080。
方案二:在默認站點中建立虛擬目錄的方式部署。
① 修改主配置文件 "/程序安裝目錄/conf/server.xml",在默認 Host(站點)中增加 Context(應(yīng)用程序)的定義。
使用文本編輯器打開配置文件:
[centos@host ~]$ sudo gedit /usr/local/tomcat-9.0.34/conf/server.xml
在文件中的增加以下配置并保存:
<Server>
<Service>
<Engine>
<Host name="localhost" appBase="webapps" autoDeploy="true">
<Context path="/virtualdirectory" docBase="physicaldirectory" reloadable="true" debug="0" />
</Host>
</Engine>
</Service>
</Server>
② 在"/程序安裝目錄/webapps"中創(chuàng)建"physicaldirectory"目錄。
[centos@host ~]$ sudo -u tomcat mkdir /usr/local/tomcat-9.0.34/webapps/physicaldirectory
③ 并將已發(fā)布的 WAR 文件拷貝到該目錄中,Tomcat 會自動檢測部署,用戶通過"http://ip:port/virtualdirectory/WAR文件名"即可訪問,默認的端口是8080。
方案三:建立新的站點部署(主機頭部署)。
① 修改主配置文件 "/程序安裝目錄/conf/server.xml",在默認的 Service (服務(wù))中增加自定義 Host 的定義。
使用文本編輯器打開配置文件:
[centos@host ~]$ sudo gedit /usr/local/tomcat-9.0.34/conf/server.xml
在文件中的增加以下配置并保存:
<Server>
<Service>
<Engine>
<Host name="www.host.com" appBase="hostapps" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="hostlogs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
② 在"/程序安裝目錄"中創(chuàng)建"hostapps"和"hostlogs"目錄。
[centos@host ~]$ sudo -u tomcat mkdir /usr/local/tomcat-9.0.34/hostapps
[centos@host ~]$ sudo -u tomcat mkdir /usr/local/tomcat-9.0.34/hostlogs
③ 將已發(fā)布的 WAR 文件拷貝到該目錄中,Tomcat 會自動檢測部署,用戶通過"http://www.host.com:port/WAR文件名"即可訪問,默認的端口是8080。
④ 在 DNS 服務(wù)器上建立域名"www.host.com"與服務(wù)器 IP 地址的解析記錄。**
方案四:建立新的監(jiān)聽端口部署。
① 修改主配置文件 "/程序安裝目錄/conf/server.xml",增加新的 Service(服務(wù))的定義。
使用文本編輯器打開配置文件:
[centos@host ~]$ sudo gedit /usr/local/tomcat-9.0.34/conf/server.xml
在文件中的增加以下配置并保存:
<Server>
<Service name="Catalina_New">
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps_new" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs_new"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
② 在"/程序安裝目錄"中創(chuàng)建"webapps_new"和"logs_new"目錄。
[centos@host ~]$ sudo -u tomcat mkdir /usr/local/tomcat-9.0.34/webapps_new
[centos@host ~]$ sudo -u tomcat mkdir /usr/local/tomcat-9.0.34/logs_new
重啟啟動 Tomcat 后,會監(jiān)聽8081端口。在新的 Service(服務(wù))中,繼續(xù)選擇方案一、方案二、方案三的方式部署站點和應(yīng)用程序,但是在訪問時應(yīng)使用新的端口號。