將Java應用部署到Apache Tomcat服務器是開發Web應用過程中常見的任務。Tomcat是一個免費且開源的Servlet容器,它為Java應用提供了運行環境。本文將介紹如何準備你的Java應用,并將其部署到Tomcat服務器上。
Java 應用部署
tomcat 的根目錄結構
Tomcat中默認網站根目錄是$CATALINA_BASE/webapps/
在Tomcat中部署主站應用程序和其他應用程序,和之前WEB服務程序不同
nginx
假設在nginx中部署2個網站應用eshop、forum,假設網站根目錄是/data/nginx/html,那么部署可以是這樣的,eshop解壓縮所有文件放到 /data/nginx/html/ 目錄下,forum 的文件放在 /data/nginx/html/forum/下
最終網站鏈接有以下對應關系
http://localhost/ 對應于eshop的應用,即 /data/nginx/html/
http://localhost/forum/ 對應于forum的應用,即/data/nginx/html/forum/
Tomcat
Tomcat中默認網站根目錄是CATALINA_BASE/webapps/
在Tomcat的webapps目錄中,有個非常特殊的目錄ROOT,它就是網站默認根目錄
將eshop解壓后的文件放到這個CATALINA_BASE/webapps/ROOT中
bbs解壓后文件都放在CATALINA_BASE/webapps/forum目錄下$CATALINA_BASE/webapps下面的每個目錄都對應一個Web應用,即WebApp
最終網站鏈接有以下對應關系
http://localhost/ 對應于eshop的應用WebApp,即$CATALINA_BASE/webapps/ROOT/目錄,
http://localhost/forum/ 對應于forum的應用WebApp,即$CATALINA_BASE/webapps/forum/
如果同時存在CATALINA_BASE /webapps/ROOT/forum,仍以$CATALINA_BASE/webapps/forum/ 優先生效。
每一個虛擬主機都可以使用appBase指令配置自己的站點目錄,使用appBase目錄下的ROOT目錄作為主站目錄。
主頁目錄和編碼
[root@ubuntu2404 ~]#cat /usr/local/src/tomcat/webapps/ROOT/index.html
<h1>你好</h1>
[root@ubuntu2404 ~]#curl 192.168.1.20:8080/index.html -I
HTTP/1.1 200
Accept-Ranges: bytes
ETag: W/"16-1746341360522"
Last-Modified: Sun, 04 May 2025 06:49:20 GMT
Content-Type: text/html #tomcat無指定編碼,瀏覽器自動識別為GBK,可能會導致亂碼
Content-Length: 16
Date: Sun, 04 May 2025 06:50:04 GMT#瀏覽器的設置默認不是UTF-8,可能會導致亂碼,下載Chart插件可解決
修改網頁指定編碼
[root@ubuntu2404 tomcat]#vim webapps/ROOT/index.html
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<title>tomcat</title>
</head>
<h1>你好</h1>
JSP WebApp目錄結構
CATALINA_BASE/webapps下面的每個目錄對應的WebApp,可能有以下子目錄,但下面子目錄是非必須的
- 主頁配置:默認按以下順序查找主頁文件 index.html,index.htm、index.jsp
- WEB-INF/:當前目錄WebApp的私有資源路徑,通常存儲當前應用使用的web.xml和context.xml 配置文件
- META-INF/:類似于WEB-INF,也是私有資源的配置信息,和WEB-INF/目錄一樣瀏覽器無法訪問
- classes/:類文件,當前webapp需要的類
- lib/:當前應用依賴的jar包
主頁設置
全局配置實現修改默認主頁文件
默認情況下 tomcat 會在$CATALINA_BASE/webapps/ROOT/目錄下按以下次序查找文件,找到第一個則進行顯示
index.html
index.htm
index.jsp
可以通過修改 $CATALINA_BASE/conf/web.xml 中的下面標簽內容修改默認頁文件
修改默認主頁文件
[root@ubuntu2404 tomcat]#pwd
/usr/local/src/tomcat
[root@ubuntu2404 tomcat]#echo '<h1>www.caoge.com</h1>' > webapps/ROOT/index.html
[root@ubuntu2404 ~]#curl 192.168.1.20:8080
<h1>www.caoge.com</h1>[root@ubuntu2404 tomcat]#cat 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></web-app>
[root@ubuntu2404 tomcat]#vim conf/web.xml<welcome-file-list><welcome-file>index.jsp</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.html</welcome-file></welcome-file-list>
</web-app>
[root@ubuntu2404 tomcat]#systemctl restart tomcat
[root@ubuntu2404 ~]#curl 192.168.1.20:8080
WebApp的專用配置文件
將上面主配置文件conf/web.xml中的welcome-file-list標簽內容,復制到/usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml中,如下所示
針對主站點根目錄設置專用配置文件
[root@ubuntu2404 tomcat]#vim webapps/ROOT/WEB-INF/web.xml
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaeehttps://jakarta.ee/xml/ns/jakartaee/web-app_6_1.xsd"version="6.1"metadata-complete="true"><display-name>Welcome to Tomcat</display-name><description><welcome-file-list><welcome-file>index.html</welcome-file> #修改三個文件的順序<welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list></description></web-app>
#配置修改后,無需重啟tomcat服務,即可觀察首頁變化
[root@ubuntu2404 ~]#curl 192.168.1.20:8080
<h1>www.caoge.com</h1>
配置規則
webApp的專有配置優先于系統的全局配置
修改系統的全局配置文件,需要重新啟動服務生效
修改 webApp的專有配置,無需重啟即可生效
應用部署實現
WebApp應用的歸檔格式
.war:WebApp打包,類zip格式文件,通常包括一個應用的所有資源,比如jsp,html,配置文件等
.jar:EJB類文件的打包壓縮類zip格式文件,包括很多的class文件,網景公司發明
.rar:資源適配器類打包文件,目前已不常用
.ear:企業級WebApp打包,目前已不常用
傳統應用開發測試后,通常打包為war格式,這種文件部署到Tomcat的webapps目錄下,并默認會自動解包展開和部署上線
#conf/server.xml中文件配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
部署方式
部署Deploy:將webapp的源文件放置到目標目錄,通過web.xml和context.xml文件中配置的路徑就可以訪問該webapp,通過類加載器加載其特有的類和依賴的類到JVM上,即:最終用戶可以通過瀏覽器訪問該應用。
自動部署:Tomcat一旦發現多了一個web應用APP.war包,默認會自動把它解壓縮,加載并啟動起來。
手動部署
- 冷部署:將webapp放到指定目錄,才去啟動Tomcat服務。
- 熱部署:Tomcat服務不停止,需要依賴manager、ant腳本、tcd(tomcat client deployer)等工具。
反部署 undeploy:停止webapp運行,并從JVM上清除已經加載的類,從Tomcat應用目錄中移除部署的文件。
啟動 start:啟用 webapp 能夠訪問
停止 stop:禁用 webapp 不能訪問,不能提供服務,但是JVM并不清除它
部署WebApp的目錄結構
常見開發項目目錄組成
#目錄結構一般由開發用工具自動生成,以下模擬生成相關目錄
mkdir projects/myapp/{WEB-INF,META-INF,classes,lib} -pv
mkdir: 已創建目錄 "projects"
mkdir: 已創建目錄 "projects/myapp"
mkdir: 已創建目錄 "projects/myapp/WEB-INF"
mkdir: 已創建目錄 "projects/myapp/META-INF"
mkdir: 已創建目錄 "projects/myapp/classes"
mkdir: 已創建目錄 "projects/myapp/lib"#常見應用首頁,內容就用前面的test.jsp內部
vim projects/myapp/index.jsp#手動復制項目目錄到webapps目錄下去
cp -r projects/myapp/ /usr/local/tomcat/webapps/#注意權限和屬性
chown -R tomcat:tomcat /usr/local/tomcat/webapps/myapp#訪問http://YourIP:8080/myapp/
實戰案例:手動的應用部署
部署主頁目錄下的應用WebApp
[root@ubuntu2404 tomcat]#vim webapps/ROOT/status.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>jsp例子</title>
</head>
<body>
后面的內容是服務器端動態生成字符串,最后拼接在一起
<%
out.println("hello jsp");
%>
<br>
<%=request.getRequestURL()%>
</body>
</html>
[root@ubuntu2404 ~]#curl 192.168.1.20:8080/status.jsp<!DOCTYPE html>
<html>
<head>