Spring加载时出现ContextLoaderListener问题

时间:2009-11-12 10:44:00

标签: java spring

当我的春天加载时,它会在类路径中找不到applicationContext.xml,只能抛出FileNotFoundException,如下所示。请帮我解决这个问题。

我的web.xml内容如下,

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/Context.xml</param-value>
    </context-param>

    <servlet>
        <servlet-name>flex</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/web-spring-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <servlet-mapping>
        <servlet-name>flex</servlet-name>
        <url-pattern>/messagebroker/*</url-pattern>
    </servlet-mapping>
</web-app>

抛出的异常如下,

  

SEVERE:发送上下文的异常   初始化事件到侦听器实例   班级   org.springframework.web.context.ContextLoaderListener   org.springframework.beans.factory.BeanDefinitionStoreException:   IOException解析XML文档   类路径资源   [applicationContext.xml中];嵌套   例外是   java.io.FileNotFoundException:class   路径资源[applicationContext.xml]   不能打开,因为它没有   存在引起的:   java.io.FileNotFoundException:class   路径资源[applicationContext.xml]   不能打开,因为它没有   存在于   org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:135)     在   org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:297)     在   org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:280)     在   org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:131)     在   org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:147)     在   org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:123)     在   org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:91)     在   org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:100)     在   org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:298)     在   org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:156)     在   org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:246)     在   org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:184)     在   org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)     在   org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)     在   org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)     在   org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)     在   org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)     在   org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)     在   org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926)     在   org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889)     在   org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)     在   org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)     在   org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)     在   org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)     在   org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)     在   org.apache.catalina.core.StandardHost.start(StandardHost.java:719)     在   org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)     在   org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)     在   org.apache.catalina.core.StandardService.start(StandardService.java:516)     在   org.apache.catalina.core.StandardServer.start(StandardServer.java:710)     在   org.apache.catalina.startup.Catalina.start(Catalina.java:578)     在   sun.reflect.NativeMethodAccessorImpl.invoke0(母语   方法)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)     在   java.lang.reflect.Method.invoke(Method.java:585)     在   org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)     在   org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)   2009年11月12日下午4:02:09   org.apache.catalina.core.ApplicationContext   日志

当我不想将任何文件命名为applicationContext.xml时,为什么要查找它?正如web.xml ..

中明确指出的那样

3 个答案:

答案 0 :(得分:5)

对不起,伙计们,这是由于tomcat中的一个简单问题。

很久以前我正在处理一个未从tomcat webapp文件夹中删除的项目。那也是春天的项目。

我通过在我正在处理的当前项目中的web.xml中注释掉所有内容来解决这个问题。当我这样做时,它仍然试图加载弹簧容器。那是我打开tomcat管理器Web应用程序并眯着眼睛看到没有引导的应用程序。

我发现一个没有在tomcat管理器Web应用程序中引导的应用程序,然后我删除了该应用程序,现在我的应用程序开始像魅力一样工作......

答案 1 :(得分:4)

您实际上已经配置了两个不同的Spring引导加载器 - ContextConfigListener将尝试加载上下文文件(其名称默认为applicationContext.xml),然后DispatcherServlet将在第二个启动并尝试加载您的{{1} (DispatcherServlet将加载此上下文作为第一个的子级)。

如果您不需要加载两个上下文(或拥有父上下文),则可以删除ContextConfigListener并仅使用DispatcherServlet。

更新:您使用的是哪个版本的Spring?堆栈跟踪中的行号与我在Spring 2.5.6中使用的org.springframework.web.context.ContextLoader的源代码不匹配。你确定你使用的是相同版本的spring-core和spring-webmvc吗?

答案 2 :(得分:0)

您的Context.xml是否尝试从类路径导入applicationContext.xml?代码如下所示:

<import resource="classpath:applicationContext.xml"/>

基于堆栈跟踪,它正在尝试从类路径加载该文件(请参阅第2个到最后一个条目)。我刚试过我的机器,如果它找不到根上下文文件,那么跟踪的第二行是ServletContextResource.getInputStream,所以它正在读取Context.xml。