SSH学习-struts2整合spring报错'Could not open ServletContext resource [/WEB-INF/applicationContext.xml]'

记录一下整合时的报错。

主要问题

在学习Struts2整合Spring时,启动Tomcat服务器报错‘Could not open ServletContext resource [/WEB-INF/applicationContext.xml]’,其中参考博客,修改了spring-mvc的context-param的配置,后面发现原来是context-param配置错误,将名字contextConfigLocation写成了contextLocationConfig,导致报错。

  <context-param>
    <param-name>contextConfigLocation</param-name> 
    <!-- 由于param-name名字写错,写成contextLocationConfig,导致报错 -->
    <!-- 报错提示为Could not open ServletContext resource [/WEB-INF/applicationContext.xml -->
    <!-- 由于配置错误,会默认从WEB-INF下寻找applicationContext.xml文件进行解析,只有正确配置了context-param,才会解析指定配置的spring-mvc.xml -->
    <param-value>classpath:config/spring-*.xml</param-value>
  </context-param>

以下是报错内容:

五月 07, 2019 11:49:25 下午 org.apache.catalina.core.StandardContext listenerStart
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:93)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:467)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5157)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5680)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1702)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1692)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]
    at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:117)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)
    ... 21 more

修改param-name后,重新启动Tomcat服务器OK,不再报错。

原因分析

如果不特意指定参数名为contextConfigLoction的<context-parameter>元素,那么spring的ContextLoderListener监听器就会在/WEB-INF/下去寻找并加载该目录下的名为applicationContext.xml这个文件。因此当context-parameter下的param-name配置错误的话,导致按照默认的路径去寻找,而默认路径下没有对应的xml文件,导致报错。参考如下Spring官方文档,<context-param>的作用就是告诉加载的spring xml文件在哪里。

参考博客:

(1)https://blog.csdn.net/wlwlwlwl015/article/details/48134763

原文地址:https://www.cnblogs.com/youngchaolin/p/10829090.html