现在的位置: 首页 > 综合 > 正文

关于spring 在web.xml 中的配置问题

2013年12月10日 ⁄ 综合 ⁄ 共 4967字 ⁄ 字号 评论关闭
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [WEB-INF/spring-context.xml]; nested exception is java.io.FileNotFoundException: class path resource [WEB-INF/spring-context.xml] cannot be opened because it does not exist
	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:4205)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4704)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
	at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:675)
	at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:601)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1315)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1061)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
	at org.apache.catalina.core.StandardService.start(StandardService.java:525)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.io.FileNotFoundException: class path resource [WEB-INF/spring-context.xml] cannot be opened because it does not exist
	at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:158)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)
	... 36 more

  需要说明的几点:

  1.  spring-context.xml 就是 applicationContext.xml ,此处是我改的名字。

  2.  该文件 spring-context.xml 确实在 WEB-INF 目录下。

  下面贴出 web.xml 中的配置

   

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>
            classpath:/WEB-INF/spring-context.xml
        </param-value>
	</context-param>

<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

  看来看去的貌似木有问题,可是为什么还会报找不到 xml的错呢?
  刚才google 一下,很多帖子给的解释是手动将 spring-context.xml 复制一份至WEB-INF/classes 目录下,可是如果我们修改了WEB-INF/spring-context.xml 文件中的内容也要修改WEB-INF/classes 目录下对应的该文件,这样比较麻烦,有木有一劳永逸的解决办法呢?

  下面给出两种解决方法...

  方法1. 我们一般会将 spring 的配置放在 WEB-INF 目录下,如果你选择了这种目录结构,那么 web.xml 中正确配置是这个样子

   

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>
            classpath*:/WEB-INF/spring-context.xml
        </param-value>
</context-param>

注意classpath后面跟着个*,如果不配置那么就会报上面提到 IOException 以及 FileNotFoundException: class path resource [WEB-INF/spring-context.xml] cannot be opened because it does not exist ...

方法2. 

将 spring-context.xml 文件直接放在 src 目录下,容器每次会自动加载该文件至WEB-INF/classes 目录中。

 以上两种方法都是经过测试!环境: window 7 + Eclipse 3.7(Indigo) + jdk 6.0.30 + Spring 3.0.5 

 

抱歉!评论已关闭.