当我的春天加载时,它会在类路径中找不到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
..
答案 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。