Tomcat 作為最流行的 Servlet 容器,理解其請求處理流程與部署機制,是 Java Web 開發者的必修課。本文結合圖解與實戰 Demo,講解 Tomcat 目錄結構、請求流轉、WAR 包部署與 `

web-deploy/ ├── index.jsp # 登錄表單 ├── WEB-INF/ │ ├── web.xml # Servlet 映射 │ └── classes/ │ └── com/lp/servlet/UserServlet.class
index.jsp
<form action="user/login" method="post">
請輸入用戶名:<input type="text" name="userName" />
<input type="submit" value="提交" />
</form>
UserServlet.java
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html;charset=gb2312");
PrintWriter out = resp.getWriter();
String userName = req.getParameter("userName");
out.println("歡迎你:" + userName);
}
web.xml
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.lp.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/user/login</url-pattern>
</servlet-mapping>
| 方式 | 操作步驟 | 優點 | 缺點 |
|---|---|---|---|
| WAR 包放入 webapps | 1. 專案打包為 `web-deploy.war` 2. 複製到 `$CATALINA_HOME/webapps/` 3. 啟動 Tomcat 自動解壓 |
最簡單、生產環境標準 | 修改代碼需重新打包部署 |
| 外部 Context 配置 | 1. 在 `$CATALINA_HOME/conf/Catalina/localhost/` 新建 `web-deploy.xml` 2. 內容: `<Context path="/web-deploy" docBase="C:/91/web-deploy" reloadable="true" />` 3. 重啟 Tomcat |
開發期熱部署(reloadable)、不動 WAR、指向任意目錄 | 需手動維護 XML、生產環境不推薦 |
path:Web 應用上下文路徑,訪問 URL 前綴(如 `/web-deploy`)。docBase:Web 應用根目錄絕對路徑(含 `WEB-INF`)。reloadable="true":監聽 `/WEB-INF/classes/` 與 `/WEB-INF/lib/` 變更,自動重載類,**僅開發環境開啟**,生產環境會嚴重影響效能。server.xml 中 `Tomcat 部署本質是「將 Web 應用掛載到 Host 的某個 Context 路徑」。生產用 WAR,開發用外部 Context + `reloadable`,靈活切換即可。深入理解 `server.xml`、`context.xml`、`web.xml` 三層配置關係,能快速定位部署故障。