J2EE 部署本質是將應用組件按規範打包,置入應用服務器容器。部署描述文件(基於 XML)作為組件與容器的「契約」,定義事務、安全、資源引用等中介服務。一個 J2EE 應用打包為 EAR(Enterprise Archive),內含 JAR(EJB/客戶模塊)、WAR(Web 模塊)、RAR(資源適配器)等模塊。
| 模塊類型 | 文件後綴 | 核心內容 | 部署描述文件 |
|---|---|---|---|
| EJB 模塊 | .jar | EJB 類、接口、依賴庫 | ejb-jar.xml (META-INF/) |
| Web 模塊 | .war | Servlet/JSP/HTML/圖片/標籤庫 | web.xml (WEB-INF/) |
| 資源適配器 | .rar | JCA 實現類、原生庫 | ra.xml (META-INF/) |
| 應用客戶模塊 | .jar | 客戶端類、JNDI 配置 | application-client.xml |
Servlet 2.4 起採用 XML Schema 定義,核心配置元素包括:
<servlet>、<servlet-mapping><filter>、<filter-mapping>(編碼、認證、日誌)<listener>(Session 統計、Spring 容器啟動)<session-config> 超時時間<security-constraint>、<login-config><resource-ref>(DataSource、JMS、Mail)<welcome-file-list>、<error-page>、<mime-mapping>注意:元素順序必須遵循 DTD/XSD 規範,否則部署失敗。
mywebapp/
├── index.jsp
├── css/, js/, images/
├── WEB-INF/
│ ├── web.xml
│ ├── classes/ # 編譯後的 Servlet/Filter/Listener 類
│ ├── lib/ # 依賴 JAR 包
│ ├── tags/ # 標籤庫 .tld 文件
│ └── jsp/ # 內部 JSP 文件(防直接訪問)
└── META-INF/ # 可選,存放 MANIFEST.MF
| 方式 | 操作 | 優點 | 缺點 |
|---|---|---|---|
| 目錄部署 (Exploded) | 將編譯後目錄放入 $CATALINA_HOME/webapps/ | 開發調試便捷,修改文件即時生效 | 文件分散,遷移不便 |
| WAR 文件部署 | 打包為 .war 放入 webapps | 單文件攜帶,跨平台移植性強,版本管理易 | 每次修改需重新打包 |
Tomcat 通過 server.xml 中 <Host unpackWARs="true/false"> 控制是否自動解壓 WAR。
<war> 任務打包。mvn clean package 自動編譯、測試、打包 WAR,依賴管理更優。reloadable="true"、調試端口)。context.xml,而非硬編碼於代碼。-Xms -Xmx -XX:MetaspaceSize -Xss。/health)。掌握 J2EE 打包部署規範,是從「能跑通」走向「穩定交付」的關鍵。War 包結構規範、web.xml 元素語義、部署方式選型、自動化構建鏈,構成了 Java Web 工程師的核心基本功。