找不到spring的applicationContext.xml异常

来源:互联网 发布:天宫一号 知乎 编辑:程序博客网 时间:2024/05/16 08:06
请问一下各位,我的Action里面老是抱找不到spring的applicationContext.xml的错误,尝试了很多路径,都不行,希望各位帮忙解答一下.我的Action里面的路径ApplicationContext context=new FileSystemXmlApplicationContext("src/applicationContext.xml");包错信息:javax.servlet.ServletException: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [D:\Program Files\apache-tomcat-6.0.7\bin\chinamobile\src\applicationContext.xml]; nested exception is java.io.FileNotFoundException: chinamobile\src\applicationContext.xml (系统找不到指定的路径。)at org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at filter.EncodingFilter.doFilter(EncodingFilter.java:27)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:212)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)at java.lang.Thread.run(Thread.java:619)Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [D:\Program Files\apache-tomcat-6.0.7\bin\chinamobile\src\applicationContext.xml]; nested exception is java.io.FileNotFoundException: chinamobile\src\applicationContext.xml (系统找不到指定的路径。)at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:180)at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:148)at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:129)at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:145)at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:113)at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:81)at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:89)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:262)at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:89)at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:74)at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:65)at struts.action.LoginAction.execute(LoginAction.java:53)at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)... 20 moreCaused by: java.io.FileNotFoundException: chinamobile\src\applicationContext.xml (系统找不到指定的路径。)at java.io.FileInputStream.open(Native Method)at java.io.FileInputStream.<init>(FileInputStream.java:106)at org.springframework.core.io.FileSystemResource.getInputStream(FileSystemResource.java:85)at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:167)... 32 more 


解决方案:

在web.xml增加如下代码,看看
<context-param>
<param-name> contextConfigLocation </param-name>
<param-value> /WEB-INF/classes/applicationContext.xml </param-value>
</context-param>
<servlet>
<servlet-name> SpringContextServlet </servlet-name>
<servlet-class> org.springframework.web.context.ContextLoaderServlet </servlet-class>    
<load-on-startup> 1 </load-on-startup>
</servlet>
 -----------------------------

分析:

java.io.FileNotFoundException这个异常信息,遇到的问题及解决方法贴出来可能有以下几种情况:

第一种情况:使用Myeclipse工具创建Spring项目时,按照书上的例子写好程序后,执行时出现该异常。这时需要注意到,Myeclipse默认的把applicationContext.xml文件放在项目的src目录下,而一般我们看到的例子在读取这个文件时使用的语句如下:

ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml");


其实这时这么写就不行了,因为这个语句在查找applicationContext.xml文件时是在项目的根目录下查找,而不会到src目录下查找。这时,应该把语句改为:

ApplicationContext context = new FileSystemXmlApplicationContext("src/applicationContext.xml");


即加上src这个目录,就不会出错了。如果不是使用Myeclipse而是使用eclipse自己导入spring包进行开发,就要先看一下在建项目的时候,是选择把.java文件和.class文件分开放置还是放在同一个目录,如果选择了分开放置则情况和上面的一样(前提条件是applicationContext.xml文件也是自己建在src目录下);如果选择了把.java文件和.class文件放在同一个目录下,这时就要看建applicationContext.xml文件时放在哪个目录下了,如果是放在根目录下,就使用代码1的代码就可以了。如果把applicationContext.xml文件和.java文件放在了同一个目录下,这个时候就要加上程序的包路径了,如我的Java源程序的包名是org.wzhongyu,我就要用下面的语句来实现:

  代码3:(注意:这里不能用org.wzhongyu.applicationContext.xml,因为程序会认为org.wzhongyu.也是文件名的内容)

ApplicationContext context = new FileSystemXmlApplicationContext("org/wzhongyu/applicationContext.xml");


第二种情况:使用eclipse+springIDE进行开发,而配置文件使用属性配置文件(即.properties文件),出现异常。这时应该注意,配置文件应该放在CLASSPATH路径下,如果建项目的时候没有选择把.java文件和.class文件分开放置,那么这个.properties文件就应该放在项目的根目录下,这样不会出错。如果建项目的时候,选择了把.java文件和.class文件分别放在src目录和bin目录下,这时一定要注意把.properties文件放在src根目录下,否则就会出错。但是,我们读取这个配置文件的时候,一定不能加上src这个目录,用下面的代码:

BeanDefinitionRegistry reg = new DefaultListableBeanFactory(); PropertiesBeanDefinitionReader reader = new PropertiesBeanDefinitionReader(reg); reader.loadBeanDefinitions(new ClassPathResource("beans-config.properties"));


这里没有加上src,因为程序执行的CLASSPATH就是在src根目录下,不放在这里就会出错,就是出现java.io.FileNotFoundException这个异常信息。

另外比较好的解决方式就是前面在web.xml指定其位置,这样项目在加载的时候就会知道到哪里去寻找这个配置文件,而且不需要在写什么相对路径,这是比较省事的方式,直接就可以通过这样的方式获取到ApplicationContext 对象。

ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml");

 


 

原创粉丝点击