一、Tomcat簡介
Tomcat是Apache軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun和其他一些公司及個人共同開發而成。
Tomcat服務器是一個免費的開放源代碼的Web應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP程序的首選。
Tomcat和Nginx、Apache(httpd)、lighttpd等Web服務器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式。不過,Tomcat處理靜態HTML的能力不如Nginx/Apache服務器。
Tomcat官網: Apache Tomcat? - Welcome!
二、安裝部署Tomcat
1、安裝jdk運行環境
[root@openEuler-1 ~]# ls
anaconda-ks.cfg jdk-8u261-linux-x64.rpm
[root@openEuler-1 ~]# yum install jdk-8u261-linux-x64.rpm
[root@openEuler-1 ~]# java -version
java version "1.8.0_261"
Java(TM) SE Runtime Environment (build 1.8.0_261-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode)
2、安裝tomcat
# 官網下載
[root@openEuler-1 ~]# wget -c https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.87/bin/apache-tomcat-9.0.87.tar.gz# 解壓并創建軟鏈接
[root@openEuler-1 ~]# tar -xf apache-tomcat-9.0.87.tar.gz -C /usr/local/
[root@openEuler-1 ~]# ln -sv /usr/local/apache-tomcat-9.0.87/ /usr/local/tomcat
3、編寫tomcat啟動腳本
# 供參考腳本
[root@openEuler-1 ~]# vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat Server
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
Environment=CATALINA_HOME=/usr/local/tomcat
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
ExecReload=/bin/kill -s HUP $MAINPID
User=tomcat
Group=tomcat
PrivateTmp=true[Install]
WantedBy=multi-user.target# 創建用戶,賦予權限
[root@openEuler-1 ~]# groupadd -r -g 53 tomcat
[root@openEuler-1 ~]# useradd -r -u 53 -g 53 -c "Apache Tomcat" -d /usr/local/tomcat/ -s /sbin/nologin tomcat
[root@openEuler-1 ~]# chown -R tomcat.tomcat /usr/local/tomcat/*# 重啟加載并啟動服務
[root@openEuler-1 ~]# systemctl daemon-reload
[root@openEuler-1 ~]# systemctl start tomcat
[root@openEuler-1 ~]# systemctl status tomcat
● tomcat.service - Apache Tomcat ServerLoaded: loaded (/usr/lib/systemd/system/tomcat.service; disabled; vendor preset: disabled)Active: active (running) since Mon 2025-03-03 12:46:30 CST; 6s agoProcess: 5512 ExecStart=/usr/local/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
...
4、測試
測試靜態頁面:
[root@openEuler-1 ~]# echo "tomcat-test~~~~" > /usr/local/tomcat/webapps/ROOT/test01.html
測試jsp頁面:
[root@openEuler-1 ~]# vim /usr/local/tomcat/webapps/ROOT/test02.jsp
<html>
<body>
<center>
Now time is: <%=new java.util.Date()%>
</center>
</body>
</html>
?三、配置虛擬主機
1、部署
[root@openEuler-1 ~]# cd /usr/local/tomcat/conf/
[root@openEuler-1 conf]# cp server.xml{,.bak}
#增加虛擬主機配置:
[root@openEuler-1 conf]# vim server.xml
...<Host name="www.a.com" appBase="webapps"unpackWARs="true" autoDeploy="true"><Context docBase="/web/a" path="" reloadable="flase" /><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /></Host><Host name="www.b.com" appBase="webapps"unpackWARs="true" autoDeploy="true"><Context docBase="/web/b" path="" reloadable="flase" /><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /></Host>
...# 準備虛擬主機目錄文件
[root@openEuler-1 conf]# mkdir -p /web/{a,b}
[root@openEuler-1 conf]# vim /web/a/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html><head><title>JSP a page</title></head><body><% out.println("Welocome to test site,http://www.a.com");%></body>
</html>
[root@openEuler-1 conf]# vim /web/b/index.jsp
<html><head><title>JSP a page</title></head><body><% out.println("Welocome to test site,http://www.b.com");%></body>
</html>
[root@openEuler-1 conf]# systemctl restart tomcat
2、測試
在windows主機上配置主機解析后測試:
四、Tomcat目錄結構
1、tomcat主目錄介紹
# cd /usr/local/tomcat/
# tree -L 1
.
├── bin #存放tomcat管理腳本
├── conf # tomcat 配置文件存放目錄
├── lib # web應用調用的jar包存放路徑
├── LICENSE
├── logs # tomcat 日志存放目錄,catalina.out 為主要輸出日志
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp # 存放臨時文件
├── webapps # web程序存放目錄
└── work # 存放編譯產生的.java 與 .class文件# cd /usr/local/tomcat/webapps
# tree -L 1
.
├── docs # tomcat 幫助文檔
├── examples # web應用實例
├── host-manager # 主機管理
├── manager # 管理
└── ROOT # 默認站點根目錄
2、Tomcat配置文件目錄介紹
# cd /usr/local/tomcat/conf
# tree -L 1
.
├── Catalina
├── catalina.policy
├── catalina.properties
├── context.xml
├── logging.properties
├── logs
├── server.xml # tomcat 主配置文件
├── server.xml.bak
├── server.xml.bak2
├── tomcat-users.xml # tomcat 管理用戶配置文件
├── tomcat-users.xsd
└── web.xml
五、tomcat管理
Tomcat管理功能用于對Tomcat自身以及部署在Tomcat上的應用進行管理的web應用。在默認情況下是處于禁用狀態的。如果需要開啟這個功能,就需要配置管理用戶。
注意:不要在生產環境使用。
1、配置tomcat-users.xml文件
# vim /usr/local/tomcat/conf/tomcat-users.xml
...
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-jmx"/>
<role rolename="manager-script"/>
<role rolename="manager-status"/>
<user username="tomcat" password="tomcat" roles="admin-gui,manager-gui,manager-jmx,manager-script,manager-status,admin-script"/>
</tomcat-users>
...
2、允許方式Manager App
# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
<Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="^.*$" /> # 允許所有主機<!-- allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" / -->
3、允許訪問Host Manager
# vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" /><!-- allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" / -->
4、訪問管理頁面
六、Tomcat配置文件
server.xml組件類別:
- 頂級組件:位于整個配置的頂層,如server。
- 容器類組件:可以包含其它組件的組件,如service、engine、host、context。
- 連接器組件:連接用戶請求至tomcat,如connector。
- 被嵌套類組件:位于一個容器當中,不能包含其他組件,如Valve、logger。
server.xml組件介紹
- engine:核心容器組件,catalina引擎,負責通過connector接收用戶請求,并處理請求,將請求轉至對應的虛擬主機host。
- host:類似于httpd中的虛擬主機,一般而言支持基于FQDN的虛擬主機。
- context:定義一個應用程序,是一個最內層的容器類組件(不能再嵌套)。配置context的主要目的指定對應對的webapp的根目錄,類似于httpd的alias,其還能為webapp指定額外?? ?的屬性,如部署方式等。
- connector:接收用戶請求,類似于httpd的listen配置監聽端口的。
- service(服務):將connector關聯至engine,因此一個service內部可以有多個connector,但只能有一個引擎engine。service內部有兩個connector,一個?? ?engine。因此,一般情?? ?況下一個server內部只有一個service,一個service內部只有一個engine,但一個service內部可以有多個connector。
- server:表示一個運行于JVM中的tomcat實例。
- Valve:閥門,攔截請求并在將其轉至對應的webapp前進行某種處理操作,可以用于任何容器中,比如記錄日志(access log valve)、基于IP做訪問控制(remote address filter valve)。
- logger:日志記錄器,用于記錄組件內部的狀態信息,可以用于除context外的任何容器中。
- realm:可以用于任意容器類的組件中,關聯一個用戶認證庫,實現認證和授權。可以關聯的認證庫有兩種:UserDatabaseRealm、MemoryRealm和JDBCRealm。
- UserDatabaseRealm:使用JNDI自定義的用戶認證庫。
- MemoryRealm:認證信息定義在tomcat-users.xml中。
- JDBCRealm:認證信息定義在數據庫中,并通過JDBC連接至數據庫中查找認證用戶。
<server><service><connector /><engine><host><context></context></host><host><context></context></host></engine></service>
</server>
1、Connector參數說明
參數 | 參數說明 |
---|---|
connector | 接收用戶請求,類似于httpd的listen配置監聽端口. |
port | 指定服務器端要創建的端口號,并在這個端口監聽來自客戶端的請求。 |
address | 指定連接器監聽的地址,默認為所有地址(即0.0.0.0) |
protocol | 連接器使用的協議,支持HTTP和AJP。AJP(Apache Jserv Protocol)專用于tomcat與apache建立通信的, 在httpd反向代理用戶請求至tomcat時使用(可見Nginx反向代理時不可用AJP協議)。 |
minProcessors | 服務器啟動時創建的處理請求的線程數 |
maxProcessors | 最大可以創建的處理請求的線程數 |
enableLookups | 如果為true,則可以通過調用request.getRemoteHost()進行DNS查詢來得到遠程客戶端的實際主機名,若為false則不進行DNS查詢,而是返回其ip地址 |
redirectPort | 指定服務器正在處理http請求時收到了一個SSL傳輸請求后重定向的端口號 |
acceptCount | 指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理 |
connectionTimeout | 指定超時的時間數(以毫秒為單位) |
2、host參數說明
參數 | 參數說明 |
---|---|
host | 表示一個虛擬主機 |
name | 指定主機名 |
appBase | 應用程序基本目錄,即存放應用程序的目錄.一般為appBase="webapps" ,相對于CATALINA_HOME而言的,也可以寫絕對路徑。 |
unpackWARs | 如果為true,則tomcat會自動將WAR文件解壓,否則不解壓,直接從WAR文件中運行應用程序 |
autoDeploy | 在tomcat啟動時,是否自動部署。 |
xmlValidation | 是否啟動xml的校驗功能,一般xmlValidation="false"。 |
xmlNamespaceAware | 檢測名稱空間,一般xmlNamespaceAware="false"。 |
3、context參數說明
參數 | 參數說明 |
---|---|
Context | 表示一個web應用程序,通常為WAR文件 |
docBase | 應用程序的路徑或者是WAR文件存放的路徑,也可以使用相對路徑,起始路徑為此Context所屬Host中appBase定義的路徑。 |
path | 表示此web應用程序的url的前綴,這樣請求的url為http://localhost:8080/path/ |
reloadable | 這個屬性非常重要,如果為true,則tomcat會自動檢測應用程序的/WEB-INF/lib 和/WEB-INF/classes目錄的變化,自動裝載新的應用程序,可以在不重啟tomcat的情況下改變應用程序 |
七、站點部署
第一種方式是直接將程序目錄放在webapps目錄下面?
第二種方式是使用開發工具將程序打包成war包,然后上傳到webapps目錄下面。
部署開源站點(jpress) jpress官網:jpress.io
下載地址:https://github.com/JpressProjects/jpress
安裝配置數據庫:
# yum -y install mariadb-server
# systemctl start mariadb.service# mysql -e "create database jpress DEFAULT CHARACTER SET utf8;"
# mysql -e "grant all on jpress.* to jpress@'localhost' identified by '123456';"
站點上線:
# ls /usr/local/tomcat/webapps/jpress-web-newest.war
/usr/local/tomcat/webapps/jpress-web-newest.war
瀏覽器訪問 http://IP:8080/jpress-web-newest/install 安裝完畢之后,重啟tomcat即可訪問。
訪問后臺:http://IP:8080/jpress-web-newest/admin/login