org.springframework.beans.factory.BeanDefinitionStoreException:
IOException parsing XML document from ServletContext resource [/WEB-INF/springmvc-servlet.xml];
nested exception is java.io.FileNotFoundException:
Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml]
核心異常:FileNotFoundException: Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml] —— 容器在 WEB-INF 目錄下找不到 SpringMVC 配置文件。
contextConfigLocation 路徑寫錯(高發)檢查 web.xml 中 DispatcherServlet 的初始化參數:
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-servlet.xml</param-value> <!-- 必須與實際文件路徑完全一致 -->
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
src/main/webapp/WEB-INF/springmvc-servlet.xml(Maven 標準目錄)@EnableWebMvc + WebApplicationInitializer),則不需要此 XML,需移除 contextConfigLocation 參數確保 pom.xml 包含資源打包配置:
<build>
<resources>
<resource>
<directory>src/main/webapp</directory>
<targetPath>WEB-INF</targetPath>
<includes><include>**/*.xml</include></includes>
</resource>
</resources>
</build>
或在 IDEA 中右鍵項目 → Maven → Reimport,確認 target 目錄下生成的 WAR 包含該文件。
springmvc-servlet.xml vs spring-mvc-servlet.xml(中劃線)WEB-INF vs web-inf(大小寫)src/main/resources 而非 src/main/webapp/WEB-INFspringmvc-servlet.xml 物理位置web.xml 中 contextConfigLocation 值,逐字母核對mvn clean package,解壓生成的 WAR,驗證 WEB-INF/springmvc-servlet.xml 存在WebAppInitializer),刪除 web.xml 中 DispatcherServlet 的 init-param@Configuration + @ComponentScan + @EnableWebMvc),徹底告別 XML 找不到的煩惱[servlet-name]-servlet.xml,如 springmvc-servlet.xml遇到 FileNotFoundException 不要慌,90% 是路徑拼寫或打包配置問題,按清單逐項排查,分分鐘解決。