Tomcat 11
1 WEB服務(wù)器
Web服務(wù)器通常由硬件和軟件共同構(gòu)成,是互聯(lián)網(wǎng)內(nèi)容對(duì)外提供訪問的核心載體。
- 硬件:本質(zhì)是一臺(tái)7×24小時(shí)穩(wěn)定運(yùn)行的電腦,它接入公網(wǎng)、擁有專屬網(wǎng)絡(luò)地址,核心作用是為其他客戶端電腦提供網(wǎng)絡(luò)服務(wù)。
生活化舉例:這就像一家24小時(shí)營(yíng)業(yè)的線下便利店的實(shí)體門店,有固定的門牌地址,能容納商品、接待到店的顧客。
- 軟件:安裝在硬件服務(wù)器上的服務(wù)程序,它能接收網(wǎng)絡(luò)中其他計(jì)算機(jī)的訪問請(qǐng)求,找到對(duì)應(yīng)的資源并返回給訪問者,把本地的文件、程序映射成可通過網(wǎng)絡(luò)訪問的虛擬URL地址。
生活化舉例:這就像便利店里的整套運(yùn)營(yíng)體系,包括導(dǎo)購(gòu)、收銀、倉(cāng)儲(chǔ)管理,顧客說要什么商品,店員能快速找到商品并交到顧客手上,完成一次完整的服務(wù)。
常見的JavaWeb服務(wù)器:
Tomcat(Apache):Java領(lǐng)域應(yīng)用最廣泛的開源Web服務(wù)器,輕量穩(wěn)定、完全免費(fèi),是中小企業(yè)和Java開發(fā)者的首選,Tomcat 11是其最新的穩(wěn)定正式版本
Jetty:比Tomcat更輕量級(jí)、更靈活的Servlet容器,啟動(dòng)速度快、資源占用低,適合嵌入式場(chǎng)景和輕量化應(yīng)用
JBoss(Redhat紅帽):完整支持JavaEE/Jakarta EE規(guī)范的企業(yè)級(jí)應(yīng)用服務(wù)器,內(nèi)置EJB容器,適合大型分布式項(xiàng)目
GlassFish(Oracle):Oracle官方推出的JavaEE/Jakarta EE參考實(shí)現(xiàn)服務(wù)器,功能完整但市場(chǎng)普及率較低
Resin(Caucho):高性能JavaEE應(yīng)用服務(wù)器,并發(fā)處理能力突出,在國(guó)內(nèi)互聯(lián)網(wǎng)企業(yè)有一定應(yīng)用
Weblogic(Oracle):商業(yè)付費(fèi)企業(yè)級(jí)應(yīng)用服務(wù)器,完整支持Jakarta EE全規(guī)范,具備超強(qiáng)的集群、容災(zāi)能力,適合超大型核心商業(yè)項(xiàng)目
Websphere(IBM):IBM旗下的商業(yè)付費(fèi)企業(yè)級(jí)應(yīng)用服務(wù)器,深度適配企業(yè)級(jí)中間件生態(tài),多用于金融、政務(wù)等大型傳統(tǒng)行業(yè)
2 Tomcat服務(wù)器
2.1 簡(jiǎn)介
Apache Tomcat? 是Apache軟件基金會(huì)旗下的開源項(xiàng)目,是Jakarta EE平臺(tái)的核心實(shí)現(xiàn)產(chǎn)品,由全球頂尖的Java開發(fā)者社區(qū)協(xié)同維護(hù),完全開源免費(fèi)、技術(shù)先進(jìn)、性能穩(wěn)定,是目前全球使用最廣泛的Java Web應(yīng)用服務(wù)器。
Tomcat 11是2025年發(fā)布的最新穩(wěn)定正式版本,完整實(shí)現(xiàn)了Jakarta EE 11平臺(tái)的核心規(guī)范,包括Jakarta Servlet 6.1、Jakarta Pages、Jakarta Expression Language、Jakarta WebSocket等核心組件,專為云原生Java應(yīng)用設(shè)計(jì),在輕量化、模塊化和云原生適配性上做了全面優(yōu)化。
這里需要特別說明:Tomcat 10及以上版本均實(shí)現(xiàn)Jakarta EE規(guī)范,核心API的包名從傳統(tǒng)Java EE的javax.*全面變更為jakarta.*,Tomcat 9及更早版本則實(shí)現(xiàn)傳統(tǒng)Java EE規(guī)范,二者應(yīng)用無法直接兼容。
生活化舉例:這就像一個(gè)品牌完成了商標(biāo)升級(jí),原來的商品包裝印的是舊品牌名javax,升級(jí)后新貨架只接受印新品牌名jakarta的商品,舊包裝商品需要更換包裝才能上架,Tomcat自帶的遷移工具就是幫你快速完成“換包裝”的工具。
2.2 安裝
版本說明
穩(wěn)定版:Tomcat 11.0.x 是當(dāng)前最新正式穩(wěn)定版本,適配Jakarta EE 11規(guī)范,適合新項(xiàng)目、云原生場(chǎng)景使用,生產(chǎn)環(huán)境建議選用該系列的正式發(fā)布版
維護(hù)版:Tomcat 10.1.x 為長(zhǎng)期維護(hù)版本,適配Jakarta EE 10規(guī)范,仍在持續(xù)更新安全補(bǔ)丁,適合存量Jakarta EE項(xiàng)目長(zhǎng)期使用
legacy版:Tomcat 9.0.x 及更早版本,適配傳統(tǒng)Java EE規(guī)范,已逐步進(jìn)入維護(hù)末期,僅建議存量老項(xiàng)目兼容使用
核心版本對(duì)應(yīng)關(guān)系
Tomcat的版本與Servlet規(guī)范、Jakarta EE/Java EE平臺(tái)、JDK版本強(qiáng)綁定,對(duì)應(yīng)關(guān)系如下:
Servlet版本與EE平臺(tái)對(duì)應(yīng)表
| Servlet Version | 對(duì)應(yīng)EE平臺(tái)版本 | 核心特性與定位 |
|---|---|---|
| 6.1 | Jakarta EE 11 | 最新云原生企業(yè)級(jí)Java規(guī)范,輕量化優(yōu)化 |
| 6.0 | Jakarta EE 10 | 現(xiàn)代化云原生Java規(guī)范,精簡(jiǎn)廢棄API |
| 5.0 | Jakarta EE 9/9.1 | 完成javax→jakarta包名全面遷移 |
| 4.0 | Java EE 8 | 傳統(tǒng)Java EE最終穩(wěn)定版本 |
Tomcat版本與運(yùn)行環(huán)境對(duì)應(yīng)表
| Servlet Version | Tomcat Version | 最低JDK版本要求 | 適配規(guī)范平臺(tái) |
|---|---|---|---|
| 6.1 | 11.0.x | 17 and later | Jakarta EE 11 |
| 6.0 | 10.1.x | 11 and later | Jakarta EE 10 |
| 5.0 | 10.0.x (已停用) | 8 and later | Jakarta EE 9/9.1 |
| 4.0 | 9.0.x | 8 and later | Java EE 8 |
下載與安裝準(zhǔn)備
Tomcat官方網(wǎng)站:http://tomcat.apache.org/
-
安裝包類型:
安裝版:需要通過安裝向?qū)б徊讲桨惭b,會(huì)寫入系統(tǒng)注冊(cè)表,配置靈活性低,不推薦開發(fā)和生產(chǎn)使用
解壓版(綠色版):下載后直接解壓即可使用,配置靈活、可隨時(shí)遷移,是開發(fā)和生產(chǎn)環(huán)境的首選
前置依賴:必須提前安裝對(duì)應(yīng)版本的JDK并配置
JAVA_HOME環(huán)境變量(Tomcat 11必須安裝JDK 17及以上版本),JDK可通過國(guó)內(nèi)鏡像站下載適配版本。
詳細(xì)安裝步驟
- 配置JDK與JAVA_HOME環(huán)境變量
正確安裝對(duì)應(yīng)版本的JDK,在系統(tǒng)環(huán)境變量中新建JAVA_HOME,值為JDK的安裝根目錄。
生活化舉例:這一步就像給便利店提前對(duì)接好總部的供貨系統(tǒng),沒有這個(gè)系統(tǒng),店里的商品就沒法正常上架、售賣,Tomcat必須通過JAVA_HOME找到Java運(yùn)行環(huán)境才能正常啟動(dòng)。
1). 解壓Tomcat安裝包
將下載的Tomcat 11解壓包,解壓到非中文、無空格、無特殊字符的目錄下(例如D:\server\apache-tomcat-11.0.8),避免因路徑特殊字符導(dǎo)致啟動(dòng)異常。
2). 啟動(dòng)Tomcat服務(wù)
進(jìn)入Tomcat解壓目錄的bin文件夾,Windows系統(tǒng)雙擊startup.bat啟動(dòng)服務(wù);Linux/Mac系統(tǒng)執(zhí)行sh startup.sh命令啟動(dòng)。
啟動(dòng)成功后,會(huì)彈出命令行窗口,顯示啟動(dòng)時(shí)長(zhǎng)、服務(wù)端口等核心信息,無報(bào)錯(cuò)即代表啟動(dòng)成功。
3). 訪問測(cè)試驗(yàn)證
打開瀏覽器,在地址欄輸入 http://localhost:8080 或 http://127.0.0.1:8080,若能正常打開Tomcat官方默認(rèn)首頁,即代表安裝、啟動(dòng)成功。
若無法訪問,需檢查:Tomcat是否正常啟動(dòng)無報(bào)錯(cuò)、8080端口是否被其他程序占用、URL地址是否拼寫正確。
4). 關(guān)閉Tomcat服務(wù)
如需停止服務(wù),Windows系統(tǒng)雙擊bin目錄下的shutdown.bat;Linux/Mac系統(tǒng)執(zhí)行sh shutdown.sh命令,即可正常關(guān)閉Tomcat服務(wù),直接關(guān)閉命令行窗口屬于強(qiáng)制終止,不推薦常規(guī)使用。
5). 解決命令行窗口中文亂碼問題
若啟動(dòng)后命令行日志出現(xiàn)中文亂碼,只需修改conf/logging.properties配置文件,將文件中所有的UTF-8編碼修改為GBK,保存后重啟Tomcat即可恢復(fù)正常。
3 Tomcat目錄結(jié)構(gòu)及核心功能
我們把Tomcat解壓后的根目錄,稱為Tomcat安裝目錄/主目錄,該目錄下的每個(gè)文件夾都有固定的作用,就像便利店的不同功能分區(qū),各司其職,核心目錄說明如下:
| 目錄名 | 核心作用與功能說明 | 生活化類比 |
|---|---|---|
| bin | 存放Tomcat的二進(jìn)制可執(zhí)行文件,核心是啟動(dòng)腳本startup、關(guān)閉腳本shutdown,以及服務(wù)相關(guān)的核心執(zhí)行程序 |
便利店的運(yùn)營(yíng)操作間,存放開門、打烊、設(shè)備啟停的所有操作按鈕和工具 |
| conf | Tomcat的核心配置目錄,存放服務(wù)的所有配置文件,是整個(gè)Tomcat的“大腦中樞” | 便利店的規(guī)章制度和運(yùn)營(yíng)配置手冊(cè),門店的營(yíng)業(yè)時(shí)間、窗口設(shè)置、人員權(quán)限都在這里定義 |
| ? server.xml | 整個(gè)Tomcat服務(wù)器的核心配置文件,可修改服務(wù)端口號(hào)、連接池配置、線程數(shù)等核心參數(shù),默認(rèn)HTTP服務(wù)端口為8080 | 門店的整體布局配置,比如改門牌號(hào)(端口號(hào))、調(diào)整收銀臺(tái)數(shù)量(線程數(shù)) |
| ? tomcat-users.xml | 存放Tomcat的用戶、密碼及角色權(quán)限配置,用于管理Tomcat后臺(tái)管理頁面的訪問權(quán)限 | 門店的員工花名冊(cè)和權(quán)限表,定義誰是店長(zhǎng)、誰是店員,分別能進(jìn)哪些區(qū)域 |
| ? web.xml | 全局部署描述符文件,注冊(cè)了所有MIME文件類型,定義了Web應(yīng)用的全局默認(rèn)配置 | 門店的商品分類規(guī)范,定義了什么類型的商品該用什么方式展示給顧客 |
| ? context.xml | 所有Web應(yīng)用的統(tǒng)一公共配置,一般無需修改 | 門店對(duì)所有入駐商家的統(tǒng)一管理規(guī)則 |
| lib | Tomcat的核心類庫(kù)目錄,存放Tomcat運(yùn)行依賴的所有jar包,該目錄下的jar包可被所有部署的Web項(xiàng)目共享 | 便利店的公共耗材倉(cāng)庫(kù),存放門店運(yùn)營(yíng)所需的通用工具,所有入駐商家都可以使用 |
| logs | 日志文件目錄,存放Tomcat啟動(dòng)、運(yùn)行、關(guān)閉的所有日志,以及異常報(bào)錯(cuò)信息,是排查問題的核心依據(jù) | 門店的運(yùn)營(yíng)日志本,每天的客流量、設(shè)備異常、運(yùn)營(yíng)事件都完整記錄在這里 |
| temp | 臨時(shí)文件目錄,存放Tomcat運(yùn)行過程中產(chǎn)生的臨時(shí)文件,服務(wù)停止后可直接清空 | 門店的臨時(shí)儲(chǔ)物區(qū),存放臨時(shí)周轉(zhuǎn)的物品,定期清理即可 |
| webapps | Web應(yīng)用部署目錄,是Tomcat的默認(rèn)項(xiàng)目部署區(qū),每個(gè)文件夾對(duì)應(yīng)一個(gè)可訪問的Web項(xiàng)目,ROOT為默認(rèn)根項(xiàng)目 | 便利店的核心貨架區(qū),每個(gè)貨架對(duì)應(yīng)一個(gè)品牌專區(qū),顧客可以直接選購(gòu)貨架上的商品 |
| work | 運(yùn)行時(shí)工作目錄,存放JSP文件編譯后生成的Java文件和Class文件,清空后重啟Tomcat會(huì)自動(dòng)重新生成 | 門店的商品加工間,顧客選購(gòu)的半成品(JSP文件),在這里加工成成品(Class文件)后交付 |
| LICENSE | Tomcat的開源許可證文件,定義了Apache 2.0開源協(xié)議的使用規(guī)范 | 門店的經(jīng)營(yíng)許可證 |
| NOTICE | 項(xiàng)目說明文件,包含Tomcat的開發(fā)者、版權(quán)聲明等信息 | 門店的品牌介紹和版權(quán)聲明 |
4 WEB項(xiàng)目的標(biāo)準(zhǔn)目錄結(jié)構(gòu)
一個(gè)能在Tomcat 11上正常部署、運(yùn)行的Java Web項(xiàng)目,必須遵循固定的標(biāo)準(zhǔn)目錄結(jié)構(gòu),就像連鎖便利店有統(tǒng)一的門店布局規(guī)范,不管哪個(gè)門店,顧客都能快速找到自己想要的東西,Tomcat也能通過固定結(jié)構(gòu)快速識(shí)別項(xiàng)目、加載資源。
標(biāo)準(zhǔn)Web項(xiàng)目目錄結(jié)構(gòu)如下:
app(項(xiàng)目根目錄,對(duì)應(yīng)項(xiàng)目的訪問上下文路徑)
├── static(非必需,約定俗成的靜態(tài)資源目錄)
│ ├── css(樣式文件)
│ ├── js(腳本文件)
│ └── img(圖片資源)
├── WEB-INF(必需目錄,名稱固定,受服務(wù)器保護(hù)的目錄,瀏覽器無法通過URL直接訪問)
│ ├── classes(必需目錄,存放Java源碼編譯后的Class文件、項(xiàng)目配置文件)
│ ├── lib(必需目錄,存放項(xiàng)目依賴的所有jar包)
│ └── web.xml(項(xiàng)目核心配置文件,新版本可省略,學(xué)習(xí)階段建議保留)
└── index.html/index.jsp(非必需,項(xiàng)目的默認(rèn)歡迎頁,訪問根路徑時(shí)默認(rèn)打開)
各核心目錄的詳細(xì)說明:
項(xiàng)目根目錄app:整個(gè)Web項(xiàng)目的根目錄,對(duì)應(yīng)Tomcat中的項(xiàng)目訪問路徑,比如根目錄名為
app,訪問路徑就是http://localhost:8080/app。static靜態(tài)資源目錄:約定俗成的目錄名,用來存放css、js、圖片等靜態(tài)資源,這些資源瀏覽器可直接通過URL訪問,就像便利店門口的促銷展架,顧客路過就能直接看到。
WEB-INF目錄:項(xiàng)目的核心保護(hù)目錄,名稱必須完全一致,瀏覽器無法直接訪問該目錄下的任何內(nèi)容,只有Tomcat服務(wù)器能讀取和操作,就像便利店的后臺(tái)倉(cāng)庫(kù)和辦公區(qū),顧客不能直接進(jìn)入,只有店員能操作。
classes目錄:存放項(xiàng)目Java源代碼編譯后的class字節(jié)碼文件,以及xml、properties等配置文件,是項(xiàng)目的核心業(yè)務(wù)代碼存放區(qū),就像倉(cāng)庫(kù)里的成品貨架,存放已經(jīng)加工好的商品。
lib目錄:存放項(xiàng)目運(yùn)行所依賴的所有第三方j(luò)ar包,比如數(shù)據(jù)庫(kù)驅(qū)動(dòng)、框架工具包等,就像倉(cāng)庫(kù)里的耗材和配件區(qū),存放商品售賣所需的配套工具。
web.xml文件:項(xiàng)目的部署描述符文件,可配置項(xiàng)目的歡迎頁、攔截器、Servlet映射等核心規(guī)則,是項(xiàng)目的“運(yùn)營(yíng)規(guī)則手冊(cè)”。
index.html/index.jsp默認(rèn)歡迎頁:訪問項(xiàng)目根路徑時(shí),Tomcat會(huì)默認(rèn)優(yōu)先打開的頁面,就像便利店的入口櫥窗,顧客進(jìn)店第一眼看到的內(nèi)容。
2.5 WEB項(xiàng)目的部署方式
Tomcat 11提供了多種靈活的項(xiàng)目部署方式,可根據(jù)開發(fā)、生產(chǎn)的不同場(chǎng)景選擇,核心部署方式有以下3種,同時(shí)針對(duì)老項(xiàng)目遷移提供了專屬解決方案。
方式1:直接將編譯好的項(xiàng)目放入webapps目錄
這是最常用、最簡(jiǎn)單的部署方式,也是開發(fā)階段的首選方式。
將編譯完成、符合標(biāo)準(zhǔn)結(jié)構(gòu)的Web項(xiàng)目完整文件夾,直接放入Tomcat根目錄的
webapps文件夾下啟動(dòng)Tomcat服務(wù),服務(wù)啟動(dòng)時(shí)會(huì)自動(dòng)加載該目錄下的所有項(xiàng)目
瀏覽器通過
http://localhost:8080/項(xiàng)目文件夾名即可訪問對(duì)應(yīng)的項(xiàng)目
補(bǔ)充:webapps目錄下的ROOT文件夾是默認(rèn)根項(xiàng)目,訪問http://localhost:8080不寫項(xiàng)目名時(shí),默認(rèn)訪問的就是ROOT項(xiàng)目。
方式2:將項(xiàng)目打成WAR包放入webapps目錄
這是生產(chǎn)環(huán)境最常用的部署方式,WAR包是Java Web項(xiàng)目的標(biāo)準(zhǔn)歸檔格式,相當(dāng)于把整個(gè)項(xiàng)目打包成一個(gè)單獨(dú)的文件,便于傳輸、部署和版本管理。
通過開發(fā)工具(IDEA/Eclipse)或Maven/Gradle構(gòu)建工具,將項(xiàng)目打包為后綴為
.war的文件將打包好的WAR包直接放入Tomcat的
webapps目錄下啟動(dòng)Tomcat服務(wù),服務(wù)啟動(dòng)后會(huì)自動(dòng)解壓WAR包,生成同名的項(xiàng)目文件夾,完成部署
訪問路徑和文件夾部署方式一致,為
http://localhost:8080/WAR包名
優(yōu)勢(shì):WAR包不會(huì)出現(xiàn)文件傳輸缺失、目錄結(jié)構(gòu)錯(cuò)亂的問題,版本管理更規(guī)范,是生產(chǎn)環(huán)境的標(biāo)準(zhǔn)部署方案。
方式3:外部路徑映射部署(虛擬路徑部署)
該方式無需將項(xiàng)目放入webapps目錄,可將項(xiàng)目存放在磁盤的任意位置,通過Tomcat配置文件映射項(xiàng)目路徑,適合多項(xiàng)目管理、磁盤分區(qū)規(guī)劃的場(chǎng)景。
在磁盤的任意非中文無空格目錄下,準(zhǔn)備好編譯完成的Web項(xiàng)目(例如
D:\myweb\app)進(jìn)入Tomcat的
conf目錄,創(chuàng)建Catalina/localhost兩級(jí)文件夾(若已存在則無需創(chuàng)建)在
localhost文件夾下,創(chuàng)建一個(gè)XML配置文件,文件名與項(xiàng)目訪問路徑一致(例如app.xml,對(duì)應(yīng)訪問路徑/app)在XML文件中寫入如下配置,核心配置
path為項(xiàng)目訪問路徑,docBase為項(xiàng)目在磁盤中的實(shí)際絕對(duì)路徑:
<!--
path: 項(xiàng)目的訪問上下文路徑,瀏覽器中輸入的項(xiàng)目訪問名
docBase: 項(xiàng)目在本地磁盤中的實(shí)際完整路徑
-->
<Context path="/app" docBase="D:\myweb\app" />```
1). 保存配置文件,啟動(dòng)Tomcat服務(wù),即可通過`http://localhost:8080/app`訪問該項(xiàng)目
### 老項(xiàng)目遷移補(bǔ)充說明
針對(duì)Tomcat 9及更早版本、基于傳統(tǒng)Java EE(`javax.*`包)開發(fā)的老項(xiàng)目,無法直接在Tomcat 11上運(yùn)行,Tomcat提供了兩種遷移解決方案:
2). **自動(dòng)遷移**:將老項(xiàng)目的文件夾或WAR包,放入Tomcat根目錄下的`webapps-javaee`文件夾,Tomcat啟動(dòng)時(shí)會(huì)自動(dòng)通過內(nèi)置的遷移工具,將項(xiàng)目中的`javax.*`包名批量轉(zhuǎn)換為`jakarta.*`,并將轉(zhuǎn)換后的項(xiàng)目自動(dòng)復(fù)制到`webapps`目錄完成部署
3). **手動(dòng)遷移**:可單獨(dú)下載Apache Tomcat Migration Tool for Jakarta EE遷移工具,離線完成項(xiàng)目的包名轉(zhuǎn)換,轉(zhuǎn)換后再部署到Tomcat 11中