Java Web 開發是企業級應用的基石。本文系統梳理 Web 基礎概念、靜態/動態資源區別、主流 Servlet 容器對比,並以 Tomcat 為例詳述從下載、安裝、啟動到常見問題排查的完整流程。
一個標準 Web 應用目錄結構:
mywebapp/ ├── index.html # 靜態資源 ├── css/ ├── js/ ├── WEB-INF/ # 安全目錄,客戶端不可直接訪問 │ ├── web.xml # 部署描述符 (Servlet 3.0+ 可選) │ ├── classes/ # 編譯後 .class 檔 │ └── lib/ # 依賴 JAR 包 └── META-INF/
| 技術 | 特點 | 現狀 |
|---|---|---|
| CGI (Perl/C) | 每請求啟動進程,效能差 | 已淘汰 |
| ASP (VBScript) | Windows/IIS 綁定,代碼混亂 | 已淘汰 → ASP.NET Core |
| PHP | 開發快、跨平台、生態豐富 | 主流選項之一 |
| Java Servlet/JSP | 多執行緒、跨平台、企業級生態、標準化 | 企業級首選 |
| 產品 | 廠商 | 定位 | 特點 |
|---|---|---|---|
| Tomcat | Apache 基金會 | Servlet/JSP 容器 | 輕量、開源、免費、標準支援完整、開發測試首選 |
| Jetty | Eclipse 基金會 | 嵌入式 Servlet 容器 | 模組化、嵌入式優秀、Spring Boot 內嵌預設 |
| WebLogic | Oracle (原 BEA) | 完整 Java EE 應用伺服器 | 功能全、商業授權、大型企業核心系統 |
| WebSphere | IBM | 企業級應用伺服器 | 高可用、整合 IBM 生態、銀行/電信核心 |
| JBoss / WildFly | Red Hat | Java EE 應用伺服器 | 開源、模組化、雲原生友善 |
學習建議:入門與開發階段專注 Tomcat;生產部署視架構選擇 Tomcat 集群、Jetty 嵌入或完整應用伺服器。
zip (解壓即用) 或 exe (安裝為服務)。Linux/Mac:下載 tar.gz。# Windows 系統環境變數 JAVA_HOME = D:\Java\jdk-17 # JDK 安裝根目錄 (非 bin 目錄) PATH += %JAVA_HOME%\bin # 讓 java/javac 指令全域可用 CATALINA_HOME = D:\Apache\apache-tomcat-10.1 # Tomcat 根目錄 (可選,啟動腳本會自動推導)
原理:startup.bat 內部讀取 JAVA_HOME 尋找 java.exe,未配置會啟動失敗。
bin 目錄,雙擊 startup.bat (Windows) 或執行 ./startup.sh (Linux/Mac)。https://localhost:8080,出現 Tomcat 貓咪歡迎頁即成功。| 現象 | 原因 | 解決方案 |
|---|---|---|
| 閃退/無輸出 | JAVA_HOME 未設或錯誤 | 檢查環境變數指向 JDK 根目錄 (含 bin、lib),非 JRE |
| 端口 8080 被佔用 | 其他程式佔用 (Oracle XE, 其他 Tomcat, IDE 內建) | 1) 修改 conf/server.xml <Connector port="8081"/> 2) netstat -ano | findstr 8080 找 PID 終止進程 |
| ClassNotFound / NoClassDefFound | JDK 版本不匹配 (如 JDK 8 跑 Tomcat 10+) | 確認 JDK 版本符合 Tomcat 要求 (Tomcat 10+ 需 JDK 11+) |
| 亂碼/編碼問題 | URI 編碼不一致 | server.xml Connector 加 URIEncoding="UTF-8" |
啟動失敗時,logs/catalina.yyyy-MM-dd.log 是第一手線索:
# 典型端口佔用錯誤
java.net.BindException: Address already in use: bind
at org.apache.tomcat.util.net.StandardSocketProcessor.bind(...)
# 典型 JAVA_HOME 錯誤
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
tomcat7-maven-plugin 或 cargo 實現一鍵部署測試。spring-boot-starter-web 內嵌 Tomcat/Jetty,無需獨立安裝,打包為可執行 JAR 即可部署。打牢 Web 基礎與容器操作功夫,是成為合格 Java 後端工程師的必經之路。