首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Web 環境搭建入門:Tomcat 安裝、部署、配置與 JSP/Servlet 實戰

     編輯:Java 相關知識

前言:Tomcat 是 Servlet/JSP 參考實現

Apache Tomcat 是最廣泛使用的 Servlet 容器,實現 Jakarta Servlet、JSP、WebSocket、EL 等規範。本文從下載安裝、目錄結構、啟動驗證、Web 應用部署、JSP 實戰、端口配置、常見問題七個維度,手把手帶你建立生產級開發環境。

一、下載與安裝

1.1 獲取安裝包

  • 官網:https://tomcat.apache.org/
  • 選擇版本:Tomcat 10 (Servlet 5.0/JSP 3.0, Jakarta EE 9)、Tomcat 9 (Servlet 4.0/JSP 2.3, Java EE 8)。**新專案建議 Tomcat 10+ / Jakarta EE 9+**。
  • 下載格式:`tar.gz` (Linux/macOS)、`zip` (Windows)、`exe` (Windows 安裝版,含服務註冊)。

1.2 解壓安裝 (通用)


# Linux/macOS
tar -zxvf apache-tomcat-10.1.x.tar.gz
mv apache-tomcat-10.1.x /opt/tomcat

# Windows
解壓到 D:\dev\tomcat (路徑無中文、無空格)

1.3 環境變數 (推薦)


# Linux/macOS ~/.bashrc / ~/.zshrc
export CATALINA_HOME=/opt/tomcat
export PATH=$CATALINA_HOME/bin:$PATH

# Windows 系統環境變數
CATALINA_HOME = D:\dev\tomcat
Path 新增 %CATALINA_HOME%\bin

二、目錄結構速覽

目錄/文件用途
`bin/`啟動/關閉腳本 (`startup.sh|bat`, `shutdown.sh|bat`)、`catalina.sh` 主控腳本、`setenv.sh` 自定義 JVM 參數
`conf/`核心配置:`server.xml` (主配置)、`web.xml` (全局 Servlet 映射)、`context.xml` (Context 默認配置)、`tomcat-users.xml` (管理用戶)
`lib/`容器共享 JAR:`servlet-api.jar`、`jsp-api.jar`、`websocket-api.jar`、JDBC 驅動建議放這裡
`webapps/`Web 應用部署目錄:WAR 包自動解壓、目錄部署、ROOT 為根應用
`logs/`日誌:`catalina.out/yyy-MM-dd.log` (標準輸出)、`localhost_access_log` (訪問日誌)
`work/`JSP 編譯生成的 Servlet 源碼/類文件、會話序列化持久化
`temp/`臨時文件 (上傳文件緩存等)

三、啟動驗證

3.1 啟動


# 前台運行 (開發調試推薦,可看控制台輸出)
$CATALINA_HOME/bin/catalina.sh run

# 後台運行
$CATALINA_HOME/bin/startup.sh

3.2 驗證

  • 瀏覽器訪問 https://localhost:8080
  • 出現「If you're seeing this page...」貓咪頁面 → 成功
  • 管理控制台:`https://localhost:8080/manager/html` (需配置 `tomcat-users.xml` 添加 `manager-gui` 角色用戶)

四、Web 應用部署三種方式

4.1 目錄部署 (開發最常用)


# 在 webapps 下創建目錄結構
webapps/
  └── myapp/
      ├── index.html
      ├── index.jsp
      ├── WEB-INF/
      │   ├── web.xml (可選,Servlet 3.0+ 可全註解)
      │   ├── classes/ (編譯後 .class)
      │   │   └── com/example/MyServlet.class
      │   └── lib/ (項目依賴 JAR)
      └── static/
          ├── css/style.css
          └── js/app.js
  • 訪問:`https://localhost:8080/myapp/index.html`
  • 熱部署:修改 `classes` 下 `.class` 或 `WEB-INF/lib` 需重啟;修改 JSP/HTML/JS/CSS 保存即時生效 (開發模式)。

4.2 WAR 包部署 (生產標準)


# Maven 打包
mvn clean package -DskipTests
# 生成 target/myapp.war

# 部署
cp target/myapp.war $CATALINA_HOME/webapps/
# Tomcat 自動解壓到 webapps/myapp/

4.3 Context XML 外部部署 (不放 webapps)


# $CATALINA_HOME/conf/Catalina/localhost/myapp.xml

  • 優點:應用與容器分離、多實例共享部署目錄、避免 webapps 混亂。

五、JSP 實戰:模板引擎的前身

5.1 基礎語法


<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>


    

Hello JSP

當前時間: <%= new java.util.Date() %>

<%-- 表達式輸出 --%> <% // Scriptlet: Java 代碼片段 (不推薦大量使用) String user = "Admin"; %>

歡迎: <%= user %>

訪問次數:

5.2 JSP 本質:編譯為 Servlet

  • 首次訪問 → Jasper 編譯器將 `.jsp` 轉為 `_jspServlet.java` → 編譯為 `.class` → 執行。
  • `work/Catalina/localhost/myapp/org/apache/jsp/index_jsp.java` 可查看生成代碼。
  • 修改 JSP 保存 → 自動重新編譯 (開發模式 `reloadable="true"`)。

5.3 隱含對象 (九大內置)

對象類型作用域
`request``HttpServletRequest`請求
`response``HttpServletResponse`響應
`session``HttpSession`會話
`application``ServletContext`應用
`out``JspWriter`頁面
`pageContext``PageContext`頁面
`config``ServletConfig`Servlet
`page``Object` (this)頁面
`exception``Throwable`錯誤頁面

六、核心配置:修改端口、虛擬主機、JVM 參數

6.1 修改 HTTP 端口 (server.xml)


 
  • 修改 `port="8080"` 為所需端口 (如 `80` 需 root/Administrator 權限)。
  • 重啟生效。

6.2 配置 JVM 參數 (setenv.sh/bat)


# Linux/macOS $CATALINA_HOME/bin/setenv.sh
export CATALINA_OPTS="-Xms512m -Xmx2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
  -XX:+UseG1GC -XX:MaxGCPauseMillis=200
  -Dfile.encoding=UTF-8 -Duser.timezone=GMT+08"

# Windows %CATALINA_HOME%\bin\setenv.bat
set CATALINA_OPTS=-Xms512m -Xmx2g ...

6.3 虛擬主機 (多域名部署)



    
        example.com
        
    
    

七、常見問題排查清單

現象可能原因排查步驟
啟動報錯 `Address already in use`端口被佔用`netstat -anp | grep 8080` / 修改 server.xml port
訪問 404路徑錯誤/未部署/Context path 不匹配檢查 webapps 目錄、url-pattern、server.xml Host appBase
JSP 修改不生效生產模式 `reloadable="false"` / work 目錄殘留刪除 work 目錄、重啟、Context 設 `reloadable="true"`
中文亂碼 (GET 參數)Tomcat 8+ 默認 ISO-8859-1Connector 加 `URIEncoding="UTF-8"`
中文亂碼 (POST 表單)請求編碼未設置Filter 統一 `req.setCharacterEncoding("UTF-8")`
類找不到 `ClassNotFoundException`JAR 缺失/版本衝突/類載入器隔離檢查 WEB-INF/lib、Maven 依賴、lib 目錄共享 JAR
內存溢出 `OutOfMemoryError`Heap/Metaspace 不足/洩漏調整 `CATALINA_OPTS`、Heap Dump 分析、排查 ThreadLocal/靜態集合洩漏

結語

Tomcat 雖非唯一選擇 (Jetty、Undertow、WildFly),但作為 Servlet 規範參考實現,掌握其安裝、部署、配置、調試全流程,是 Java Web 開發者的必修課。從「能跑起來」到「調優穩定跑」,關鍵在於理解 `server.xml` 連接器模型、`web.xml`/`ServletContext` 初始化參數、`Jasper` JSP 編譯機制、`ClassLoader` 隔離體系。下一篇將進階《Tomcat 核心組件架構解析:Connector、Container、Valve、Pipeline 與線程池模型》。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved