首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Spring SSH ContextLoaderListener 啟動失敗:applicationContext.xml 路徑問題排查

     編輯:程式設計綜合問答

錯誤堆棧核心

FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]

根本原因

Spring 容器啟動時,ContextLoaderListener 默認從 /WEB-INF/applicationContext.xml 加載配置,但實際部署路徑中找不到該文件。

排查清單

  1. 文件是否存在:打開 WAR 包或部署目錄,確認 WEB-INF/applicationContext.xml 物理存在。
  2. web.xml 配置:contextConfigLocation 參數是否正確?
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value> <!-- 默認值,可省略 -->
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
  1. 構建輸出:Maven/Gradle 打包時是否將 src/main/webapp/WEB-INF 下資源複製到 target/.../WEB-INF?檢查 pom.xml <resources> 配置。
  2. 服務器發布:Eclipse/IDEA 部署配置(Deployment Assembly / Artifacts)是否包含該文件?
  3. Clean & Rebuild:mvn clean package,刪除服務器部署目錄重新發布。
  4. 大小寫敏感:Linux 服務器區分大小寫,確認文件名完全匹配。

快速驗證

// 在 ServletContextListener 中打印真實路徑
public class DebugListener implements ServletContextListener {
    public void contextInitialized(ServletContextEvent sce) {
        String path = sce.getServletContext().getRealPath("/WEB-INF/applicationContext.xml");
        System.out.println("Real path: " + path); // null 表示未部署
    }
}

總結

90% 為**構建/部署配置導致文件未進入 WAR**,而非代碼邏輯錯誤。依次檢查:源文件位置 → 打包配置 → 服務器發布配置 → Clean Rebuild。

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