一、 安裝Tomcat
注意:安裝 tomcat 前必須先部署JDK
1. 安裝JDK
- 方法1:Oracle JDK 的二進制文件安裝
[root@node5 ~]#? mkdir /data
[root@node5 ~]#? cd /data/
[root@node5 data]#? rz[root@node5 data]#? ls
jdk-8u291-linux-x64.tar.gz
[root@node5 data]#? tar xf jdk-8u291-linux-x64.tar.gz
[root@node5 data]#? ln -s /data/jdk1.8.0_291? /usr/local/jdk
[root@node5 data]#? cd /usr/local/jdk/
[root@node5 jdk]#? ls
bin? COPYRIGHT? include? javafx-src.zip? jmc.txt? jre? legal? lib? LICENSE? man? README.html? release? src.zip? THIRDPARTYLICENSEREADME-JAVAFX.txt? THIRDPARTYLICENSEREADME.txt[root@node5 jdk]#? vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
[root@node5 jdk]#? exit
[root@node5 ~]#? java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
- 方法2:Oracle JDK 的rpm安裝
[root@node5 ~]#? cd /data
[root@node5 data]#? rz[root@node5 data]#? ls
apache-tomcat-9.0.16.tar.gz? jdk-8u201-linux-x64.rpm
[root@node5 data]#? rpm -ivh jdk-8u201-linux-x64.rpm[root@node5 data]#? vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
[root@node5 data]#? . /etc/profile[root@node5 data]#? java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
2. 安裝Tomcat
[root@node5 data]#? ls
apache-tomcat-9.0.16.tar.gz? jdk-8u201-linux-x64.rpm
[root@node5 data]#? tar xf apache-tomcat-9.0.16.tar.gz
[root@node5 data]#? ls
apache-tomcat-9.0.16? apache-tomcat-9.0.16.tar.gz? jdk-8u201-linux-x64.rpm[root@node5 data]#? ln -s /data/apache-tomcat-9.0.16 /usr/local/tomcat
[root@node5 data]#? cd /usr/local/tomcat/
[root@node5 tomcat]#? ls
bin? BUILDING.txt? conf? CONTRIBUTING.md? lib? LICENSE? logs? NOTICE? README.md? RELEASE-NOTES? RUNNING.txt? temp? webapps? work[root@node5 tomcat]#? cd bin
[root@node5 bin]#? ls
bootstrap.jar? catalina-tasks.xml? commons-daemon.jar??????????? configtest.sh? digest.sh???? setclasspath.bat? shutdown.sh? tomcat-juli.jar?????? tool-wrapper.sh
catalina.bat?? ciphers.bat???????? commons-daemon-native.tar.gz? daemon.sh????? makebase.bat? setclasspath.sh?? startup.bat? tomcat-native.tar.gz? version.bat
catalina.sh??? ciphers.sh????????? configtest.bat??????????????? digest.bat???? makebase.sh?? shutdown.bat????? startup.sh?? tool-wrapper.bat????? version.sh
方法1:執行自帶腳本,不推薦!
[root@node5 bin]#? ./catalina.sh? start
Using CATALINA_BASE:?? /usr/local/tomcat
Using CATALINA_HOME:?? /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:??????? /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH:?????? /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.[root@node5 bin]#? ss -natp |grep 8080
LISTEN???? 0????? 100???????? :::8080??????????????????? :::*?????????????????? users:(("java",pid=15931,fd=54))
方法2:
[root@node5 bin]#? useradd -s /sbin/nologin tomcat??? //新建用戶
[root@node5 bin]#? cd /usr/local/
[root@node5 local]#? chown tomcat:tomcat tomcat/ -R?? //修改屬主和屬組[root@node5 bin]#? cat > /usr/lib/systemd/system/tomcat.service <<EOF
> [Unit]
> Description=Tomcat
> After=syslog.target network.target
>
> [Service]
> Type=forking
> ExecStart=/usr/local/tomcat/bin/startup.sh
> ExecStop=/usr/local/tomcat/bin/shutdown.sh
> RestartSec=3
> PrivateTmp=true
> User=tomcat
> Group=tomcat
>
> [Install]
> WantedBy=multi-user.target
>
> EOF
[root@node5 local]#? systemctl daemon-reload
[root@node5 local]#? systemctl start tomcat
[root@node5 local]#? ss -natp |grep 8080
LISTEN???? 0????? 100???????? :::8080??????????????????? :::*?????????????????? users:(("java",pid=16475,fd=54))
二、 配置文件及核心組件
1. 配置文件
1.1 安裝目錄下文件
目錄名字 | 功能 |
bin | 存放啟動和關閉 Tomcat 的腳本文件,比較常用的是 catalina.sh、startup.sh、shutdown.sh 三個文件 |
conf | 存放 Tomcat 服務器的各種配置文件,比較常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四個文件。 |
lib | 存放 Tomcat 服務器的 jar 包,一般不作任何改動,除非連接第三方服務,比如 redis,那就需要添加相對應的 jar 包 |
logs | 存放 Tomcat 日志 catalina.out |
temp | 存放 Tomcat 運行時產生的文件 |
webapps | 存放項目資源的目錄 |
work | Tomcat 工作目錄,一般清除 Tomcat 緩存的時候會使用到(升級版本時注意要刪除里面的緩存) |
- bin
- conf
- lib
- logs
- temp
- webapps
- work
1.2 conf 子目錄文件
文件名 | 說明 |
server.xml | 主配置文件 全局生效 |
web.xml | 每個webapp只有“部署"后才能被訪問,它的部署方式通常由web.xml進行定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認部署相關的配置,每個web應用也可以使用專用配置文件,來覆蓋全局文件 |
context.xml | 用于定義所有web應用均需加載的Context配置,此文件為所有的webapps提供默認配置,每個web應用也可以使用自已專用的配置,它通常由專用的配置文件context.xml來定義,其存放位置為WEB-INF/目錄中,覆蓋全局的文件 |
tomcat-users.xml | 用戶認證的賬號和密碼文件 |
catalina.policy | 當使用security選項啟動omcat時,用于為tomcat設置安全策略 |
catalina.properties | Tomcat環境變量的配置,用于設定類加載器路徑,以及一些與JVM調優相關參數 |
logging.properties | Tomcat日志系統相關的配置,可以修改日志級別和日志路徑等 |
注意:配置文件對于大小寫敏感
2. 組件
2.1 組件分層和分類
- 頂級組件
- Server,代表整個Tomcat容器,一臺主機可以啟動多tomcat 實例 ,需要確保端口不要產生沖突
- 服務類組件
- Service,實現組織Engine和Connector,建立兩者之間關聯關系, service 里面只能包含一個Engine
- 連接器組件
- Connector,有HTTP(默認端口8080/tcp)、HTTPS(默認端口8443/tcp)、AJP(默認端口8009/tcp)協議的連接器,AJP(Apache Jserv protocol)是一種基于TCP的二進制通訊協議。
- 容器類
- Engine、Host(虛擬主機)、Context(上下文件,解決路徑映射)都是容器類組件,可以嵌入其它組件,內部配置如何運行應用程序。
- 內嵌類
- 可以內嵌到其他組件內,valve、logger、realm、loader、manager等。以logger舉例,在不同容器組件內分別定義。
- 集群類組件
- listener、cluster
2.2 核心組件
名稱 | 說明 |
server | 服務器,Tomcat運行的進程實例,一個Server中可以有多個service,但通常就一個 |
service | 服務,用來組織Engine(引擎)和Connector(連接器,端口)的對應關系,一個service中只有一個Engine |
connector | 連接器,負責客戶端的HTTP、HTTPS、AJP等協議連接。一個Connector只屬于某一個Engine |
Engine | 即引擎,用來響應并處理用戶請求。一個Engine上可以綁定多個Connector |
Host | 即虛擬主機,可以實現多虛擬主機,例如使用不同的主機頭區分 |
Context | 應用的上下文,配置特定url路徑映射和目錄的映射關系: url => directory |
范例:多個組件關系 conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">??? //此處建議將8005端口號修改為-1或0<Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost"><Host name="localhost"? appBase="webapps"unpackWARs="true" autoDeploy="true"><Context ><Context /></Host></Engine></Service>
</Server>
3. 磁盤文件和訪問的url對應關系
?????????????????????????? 等于訪問
102.168.204.50:8080? ----------------> /usr/local/tomcat/webapps/ROOT/index.jsp
102.168.204.50:8080/blog? -----------> /usr/local/tomcat/webapps/blog/index.jspROOT 和 blog 是同級項目文件
ROOT 是默認的項目,可以省略不寫,其他的項目不可以省略webapps 才是主站點
如果是訪問的是ROOT下的文件,url可以省略ROOT,否則不行
4. 主頁文件的優先級
- index.html
- index.htm
- index.jsp
[root@localhost conf]# vim /usr/local/tomcat/conf/web.xml
//此文件末尾定義了優先級,可以在站點的目錄下配置
<welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list>項目特殊要求可以寫在子配置文件中???
[root@localhost blog]#chown -R tomcat:tomcat? WEB-INF/?? //修改權限
tomcat虛擬主機
#創建虛擬主機前,必須先創建相關目錄,否則創建虛擬機不成功
mkdir /data/web{1,2,3}/ROOT/ -pv
echo web1 > /data/web1/ROOT/index.html
echo web2 > /data/web2/ROOT/index.html
echo web3> /data/web3/ROOT/index.html
chown -R tomcat.tomcat /data/#修改配置文件
vim /usr/local/tomcat/conf/server.xml
#找到 host 主機項 ,注意 根目錄中 一定要有 ROOT 這是默認 的主目錄
#注意 默認的 結束 </HOST> 這段要在 默認結束的后面加上
<Host name="www.a.com" appBase="/data/web1"unpackWARs="true" autoDeploy="true"></Host><Host name="www.b.com" appBase="/data/web2"unpackWARs="true" autoDeploy="true"></Host><Host name="www.c.com" appBase="/data/web3"unpackWARs="true" autoDeploy="true"></Host>systemctl restart tomcat
Context配置
Context作用:
- 路徑映射:將url映射至指定路徑,而非使用appBase下的物理目錄,實現虛擬目錄功能
- 應用獨立配置,例如單獨配置應用日志、單獨配置應用訪問控制
#映射指定路徑
<Context path="/test" docBase="/data/test" reloadable="true" />
#映射站點的根目錄
<Context path="/" docBase="/data/website" reloadable="true" />
#還可以添加日志等獨立的配置
<Context path="/test" docBase="/data/test" reloadable="true" ><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_test_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" />
</Context>