2009-11-12 45 views
3

當我的彈簧加載完成時,它表示在類路徑中找不到applicationContext.xml,如下圖所示,拋出FileNotFoundException。請幫我解決這個問題。ContextLoaderListener在彈簧加載時出現問題

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> 

所引發的異常情況如下,

嚴重:異常發送上下文 初始化事件監聽器類 org.springframework實例 .java.context.ContextLoaderListener org.springframework.beans.factory.BeanDefinitionStoreException: IOException解析XML文檔從 類路徑資源 [applicationContext.xml];嵌套0​​例外是 java.io.FileNotFoundException:類 路徑資源[applicationContext.xml中] 不能打開,因爲它不存在 所致: java.io.FileNotFoundException:類 路徑資源[applicationContext.xml中] 不能打開,因爲它不 在 org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:135) 存在於 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java: 297) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.load的BeanDefinitions(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) at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshabl eApplicationContext.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) at org.apache.catal ina.core.StandardContext.listenerStart(StandardContext.java:3843) 在 org.apache.catalina.core.StandardContext.start(StandardContext.java:4342) 在 org.apache.catalina.core.ContainerBase.addChildInternal( ContainerBase.java:791) at 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) 在 有機.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889) 在 org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492) 在 org.apache.catalina.startup.HostConfig 。開始(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) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core。 StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java: 578) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(母語 方法)在 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 PM org.apache.catalina.core.ApplicationContext 日誌

當我不想將任何文件命名爲applicationContext.xml時,爲什麼它必須查找它?因爲它已經在web.xml已經明確說明..

回答

5

對不起,這是由於tomcat中的一個簡單問題。

好久遠我正在研究一個未從tomcat webapp文件夾中刪除的項目。那也是春天的項目。

我想通過在我正在處理的當前項目的web.xml中註釋掉所有內容。當我這樣做時,它仍然試圖加載彈簧容器。那時候我打開了tomcat管理器web應用程序,並眯起了一些沒有引導的應用程序。

我發現,不是在Tomcat管理器的Web應用程序自舉一個應用程序,然後我刪除該應用程序,現在我的應用程序開始工作般的魅力......

4

你實際上已經配置了兩個不同的彈簧引導裝載機 - ContextConfigListener將嘗試加載上下文文件(文件名默認爲applicationContext.xml),然後DispatcherServlet將啓動第二和嘗試加載你的/WEB-INF/web-spring-context.xml(DispatcherServlet將加載這個上下文作爲第一個孩子)。

如果您不需要加載兩個上下文(或有父級和子級上下文),則可以刪除ContextConfigListener並僅使用DispatcherServlet。

更新:你使用的是什麼版本的Spring?您的堆棧跟蹤中的行號與我在Spring 2.5.6中使用的org.springframework.web.context.ContextLoader的源不匹配。你確定你使用的是同一版本的spring-core和spring-webmvc嗎?

+1

-1'ContextLoaderListener'使用(或應該使用) 'contextConfigLocation'被指定爲''',在本例中爲'/ WEB-INF/Context.xml'。雙上下文配置在這裏是故意的。 – skaffman 2009-11-12 12:29:59

+0

'contextConfigLocation' *被指定爲'context-param',它正好位於文件的頂部。它也被指定爲Servlet的'init-param'。 – skaffman 2009-11-12 14:30:35

+0

skaffman是正確的 - 我錯過了當我最初閱讀它 - 但是我想知道現在如果未知有正確的春天版本 – 2009-11-12 14:52:22

0

您的Context.xml是否嘗試從classpath中導入applicationContext.xml?該代碼是這樣的:

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

基於堆棧跟蹤,它試圖從類路徑(見第2至最後一項)加載該文件。我只是在我的機器上試過,如果它找不到根環境文件,那麼跟蹤的第二行是ServletContextResource.getInputStream,所以它正在讀取Context.xml。

+0

Context.xml只有一個bean定義的'ArrayList',它也用於測試目的。 – Antony 2009-11-13 05:34:46