Tomcat
Tomcat
1 WEB服務器
Web服務器通常由硬件和軟件共同構成。
- 硬件:電腦,提供服務供其它客戶電腦訪問
- 軟件:電腦上安裝的服務器軟件,安裝后能提供服務給網絡中的其他計算機,將本地文件映射成一個虛擬的url地址供網絡中的其他人訪問。

常見的JavaWeb服務器:
- Tomcat(Apache):當前應用最廣的JavaWeb服務器
- Jetty:更輕量級、更靈活的servlet容器
- JBoss(Redhat紅帽):支持JavaEE,應用比較廣EJB容器 –> SSH輕量級的框架代替
- GlassFish(Orcale):Oracle開發JavaWeb服務器,應用不是很廣
- Resin(Caucho):支持JavaEE,應用越來越廣
- Weblogic(Orcale):要錢的!支持JavaEE,適合大型項目
- Websphere(IBM):要錢的!支持JavaEE,適合大型項目
2 Tomcat服務器
1 簡介

Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。因為Tomcat 技術先進、性能穩定,而且免費,成為目前比較流行的Web 應用服務器。
2 安裝
1 版本
- 版本:企業用的比較廣泛的是8.0和9.0,目前比較新正式發布版本是Tomcat10.0, Tomcat11仍然處于測試階段。
- JAVAEE 版本和Servlet版本號對應關系 https://tomcat.apache.org/whichversion.html
| Servlet Version | EE Version |
|---|---|
| 6.1 | Jakarta EE ? |
| 6.0 | Jakarta EE 10 |
| 5.0 | Jakarta EE 9/9.1 |
| 4.0 | JAVA EE 8 |
| 3.1 | JAVA EE 7 |
| 3.1 | JAVA EE 7 |
| 3.0 | JAVAEE 6 |
- Tomcat 版本和Servlet版本之間的對應關系
| Servlet Version | **Tomcat ** Version | JDK Version |
|---|---|---|
| 6.1 | 11.0.x | 17 and later |
| 6.0 | 10.1.x | 11 and later |
| 5.0 | 10.0.x (superseded) | 8 and later |
| 4.0 | 9.0.x | 8 and later |
| 3.1 | 8.5.x | 7 and later |
| 3.1 | 8.0.x (superseded) | 7 and later |
| 3.0 | 7.0.x (archived) | 6 and later (7 and later for WebSocket) |
2 下載
- Tomcat官方網站:http://tomcat.apache.org/
- 安裝版:需要安裝,一般不考慮使用。
- 解壓版: 直接解壓縮使用,我們使用的版本。

3 安裝
- 正確安裝JDK并配置JAVA_HOME(以JDK17為例 https://injdk.cn中可以下載各種版本的JDK)

-
解壓tomcat到非中文無空格目錄
-
點擊bin/startup.bat啟動



- 打開瀏覽器輸入 http://localhost:8080訪問測試

- 直接關閉窗口或者運行 bin/shutdown.bat關閉tomcat

- 處理dos窗口日志中文亂碼問題: 修改conf/logging.properties,將所有的UTF-8修改為GBK

- 重啟測試

7 遇到問題啟動之后閃退
原因是是環境沒有配置JAVA_HOME 直接在path路徑上寫jdk的路徑
Tomcat 依賴 Java 環境,若 Java 環境變量未正確配置,就會致使 Tomcat 無法啟動。
- 在 “系統變量” 中,新建或者修改
JAVA_HOME變量,使其指向你的 JDK 安裝目錄,例如C:\Program Files\Java\jdk1.8.0_271。 - 找到
Path變量,編輯它,添加%JAVA_HOME%\bin和%JAVA_HOME%\jre\bin。
3 Tomcat目錄及測試
apache-tomcat-10.1.7 這個目錄下直接包含Tomcat的bin目錄,conf目錄等,我們稱之為Tomcat的安裝目錄或根目錄。
-
bin:該目錄下存放的是二進制可執行文件,如果是安裝版,那么這個目錄下會有兩個exe文件:tomcat10.exe、tomcat10w.exe,前者是在控制臺下啟動Tomcat,后者是彈出GUI窗口啟動Tomcat;如果是解壓版,那么會有startup.bat和shutdown.bat文件,startup.bat用來啟動Tomcat,但需要先配置JAVA_HOME環境變量才能啟動,shutdawn.bat用來停止Tomcat;
-
conf:這是一個非常非常重要的目錄,這個目錄下有四個最為重要的文件:
-
server.xml:配置整個服務器信息。例如修改端口號。默認HTTP請求的端口號是:8080
-
tomcat-users.xml:存儲tomcat用戶的文件,這里保存的是tomcat的用戶名及密碼,以及用戶的角色信息。可以按著該文件中的注釋信息添加tomcat用戶,然后就可以在Tomcat主頁中進入Tomcat Manager頁面了;
<tomcat-users xmlns="http://tomcat.apache.org/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd" version="1.0"> <role rolename="admin-gui"/> <role rolename="admin-script"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <user username="admin" password="admin" roles="admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status" /> </tomcat-users>web.xml:部署描述符文件,這個文件中注冊了很多MIME類型,即文檔類型。這些MIME類型是客戶端與服務器之間說明文檔類型的,如用戶請求一個html網頁,那么服務器還會告訴客戶端瀏覽器響應的文檔是text/html類型的,這就是一個MIME類型??蛻舳藶g覽器通過這個MIME類型就知道如何處理它了。當然是在瀏覽器中顯示這個html文件了。但如果服務器響應的是一個exe文件,那么瀏覽器就不可能顯示它,而是應該彈出下載窗口才對。MIME就是用來說明文檔的內容是什么類型的!
-
context.xml:對所有應用的統一配置,通常我們不會去配置它。
-
-
lib:Tomcat的類庫,里面是一大堆jar文件。如果需要添加Tomcat依賴的jar文件,可以把它放到這個目錄中,當然也可以把應用依賴的jar文件放到這個目錄中,這個目錄中的jar所有項目都可以共享之,但這樣你的應用放到其他Tomcat下時就不能再共享這個目錄下的jar包了,所以建議只把Tomcat需要的jar包放到這個目錄下;
-
logs:這個目錄中都是日志文件,記錄了Tomcat啟動和關閉的信息,如果啟動Tomcat時有錯誤,那么異常也會記錄在日志文件中。
-
temp:存放Tomcat的臨時文件,這個目錄下的東西可以在停止Tomcat后刪除!
-
webapps:存放web項目的目錄,其中每個文件夾都是一個項目;如果這個目錄下已經存在了目錄,那么都是tomcat自帶的項目。其中ROOT是一個特殊的項目,在地址欄中訪問:http://127.0.0.1:8080,沒有給出項目目錄時,對應的就是ROOT項目.http://localhost:8080/examples,進入示例項目。其中examples"就是項目名,即文件夾的名字。
-
work:運行時生成的文件,最終運行的文件都在這里。通過webapps中的項目生成的!可以把這個目錄下的內容刪除,再次運行時會生再次生成work目錄。當客戶端用戶訪問一個JSP文件時,Tomcat會通過JSP生成Java文件,然后再編譯Java文件生成class文件,生成的java和class文件都會存放到這個目錄下。
-
LICENSE:許可證。
-
NOTICE:說明文件。
4 WEB項目的標準結構
一個標準的可以用于發布的WEB項目標準結構如下

- app 本應用根目錄
- static 非必要目錄,約定俗成的名字,一般在此處放靜態資源 ( css js img)
- WEB-INF 必要目錄,必須叫WEB-INF,受保護的資源目錄,瀏覽器通過url不可以直接訪問的目錄
- classes 必要目錄,src下源代碼,配置文件,編譯后會在該目錄下,web項目中如果沒有源碼,則該目錄不會出現
- lib 必要目錄,項目依賴的jar編譯后會出現在該目錄下,web項目要是沒有依賴任何jar,則該目錄不會出現
- web.xml 必要文件,web項目的基本配置文件. 較新的版本中可以沒有該文件,但是學習過程中還是需要該文件
- index.html 非必要文件,index.html/index.htm/index.jsp為默認的歡迎頁
url的組成部分和項目中資源的對應關系

5 WEB項目部署的方式
方式1 直接將編譯好的項目放在webapps目錄下
方式2 將編譯好的項目打成war包放在webapps目錄下,tomcat啟動后會自動解壓war包(其實和第一種一樣)
方式3 可以將項目放在非webapps的其他目錄下,在tomcat中通過配置文件指向app的實際磁盤路徑
-
在磁盤的自定義目錄上準備一個app
-
在tomcat的conf下創建Catalina/localhost目錄,并在該目錄下準備一個app.xml文件
<!--
path: 項目的訪問路徑,也是項目的上下文路徑,就是在瀏覽器中,輸入的項目名稱
docBase: 項目在磁盤中的實際路徑
-->
<Context path="/app" docBase="D:\mywebapps\app" />
-
啟動tomcat訪問測試即可
6 IDEA中開發并部署運行WEB項目
1 IDEA關聯本地Tomcat
可以在創建項目前設置本地tomcat,也可以在打開某個項目的狀態下找到settings

找到 Build,Execution,Eeployment下的Application Servers ,找到+號

選擇Tomcat Server

選擇tomcat的安裝目錄

點擊ok

關聯完畢

2 IDEA創建web工程
推薦先創建一個空項目,這樣可以在一個空項目下同時存在多個modules,不用后續來回切換之前的項目,當然也可以忽略此步直接創建web項目


檢查項目的SDK,語法版本,以及項目編譯后的輸出目錄


先創建一個普通的JAVA項目

檢查各項信息是否填寫有誤

創建完畢后,為項目添加Tomcat依賴



選擇modules,添加 framework support

選擇Web Application 注意Version,勾選 Create web.xml

刪除index.jsp ,替換為 index.html


處理配置文件
- 在工程下創建resources目錄,專門用于存放配置文件(都放在src下也行,單獨存放可以盡量避免文件集中存放造成的混亂)
- 標記目錄為資源目錄,不標記的話則該目錄不參與編譯

- 標記完成后,顯示效果如下

處理依賴jar包問題
- 在WEB-INF下創建lib目錄
- 必須在WEB-INF下,且目錄名必須叫lib!!!
- 復制jar文件進入lib目錄

- 將lib目錄添加為當前項目的依賴,后續可以用maven統一解決


- 環境級別推薦選擇module 級別,降低對其他項目的影響,name可以空著不寫

- 查看當前項目有那些環境依賴


- 在此位置,可以通過-號解除依賴

3 IDEA部署-運行web項目
檢查idea是否識別modules為web項目并存在將項目構建成發布結構的配置
- 就是檢查工程目錄下,web目錄有沒有特殊的識別標記

- 以及artifacts下,有沒有對應 _war_exploded,如果沒有,就點擊+號添加

點擊向下箭頭,出現 Edit Configurations選項

出現運行配置界面

點擊+號,添加本地tomcat服務器

因為IDEA 只關聯了一個Tomcat,紅色部分就只有一個Tomcat可選

選擇Deployment,通過+添加要部署到Tomcat中的artifact

applicationContext中是默認的項目上下文路徑,也就是url中需要輸入的路徑,這里可以自己定義,可以和工程名稱不一樣,也可以不寫,但是要保留/,我們這里暫時就用默認的

點擊apply 應用后,回到Server部分. After Launch是配置啟動成功后,是否默認自動打開瀏覽器并輸入URL中的地址,HTTP port是Http連接器目前占用的端口號

點擊OK后,啟動項目,訪問測試
- 綠色箭頭是正常運行模式
- "小蟲子"是debug運行模式

- 點擊后,查看日志狀態是否有異常

- 瀏覽器自動打開并自動訪問了index.html歡迎頁

工程結構和可以發布的項目結構之間的目錄對應關系

IDEA部署并運行項目的原理
- idea并沒有直接進將編譯好的項目放入tomcat的webapps中
- idea根據關聯的tomcat,創建了一個tomcat副本,將項目部署到了這個副本中
- idea的tomcat副本在C:\用戶\當前用戶\AppData\Local\JetBrains\IntelliJIdea2022.2\tomcat\中
- idea的tomcat副本并不是一個完整的tomcat,副本里只是準備了和當前項目相關的配置文件而已
- idea啟動tomcat時,是讓本地tomcat程序按照tomcat副本里的配置文件運行
- idea的tomcat副本部署項目的模式是通過conf/Catalina/localhost/*.xml配置文件的形式實現項目部署的


浙公網安備 33010602011771號