找不到spring的applicationContext.xml异常

请问一下各位,我的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 more
Caused 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");

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值