在Tomcat 5.0部署Struts2應用時,常遇到Error filterStart導致上下文啟動失敗,核心原因是XML解析器版本衝突。
嚴重: Error filterStart
嚴重: Context startup failed due to previous errors
控制台無具體異常堆棧,需查看logs/catalina.out或logs/localhost.<日期>.log獲取詳細信息。
Tomcat 5.0common/endorsed目錄包含xml-apis.jar(舊版JAXP API),與Struts2依賴的xercesImpl.jar(新版XML解析器)版本不兼容,導致javax.xml.parsers.DocumentBuilderFactory實例化失敗。
# 進入Tomcat目錄
cd $CATALINA_HOME/common/endorsed
# 備份後刪除
mv xml-apis.jar xml-apis.jar.bak
context.xml配置<Loader delegate="false"/>優先加載Web應用庫
# 重啟Tomcat觀察日誌
./bin/startup.sh
tail -f logs/catalina.out
# 應見到:
信息: Initializing Struts2 filter
信息: Struts2 filter initialized successfully
CATALINA_OPTS="-Djava.util.logging.config.file=logging.properties"jconsole檢查類加載器層級mvn dependency:tree排查傳遞依賴版本衝突| 場景 | 風險 | 預防 |
|---|---|---|
| 老項目維護 | 容器版本鎖定 | Docker鎖定基礎鏡像版本 |
| 共享容器部署 | 公共庫污染 | 避免向common/lib放應用依賴 |
| XML處理密集型應用 | 解析器版本地獄 | 顯式排除傳遞依賴,統一版本 |