FileSystemXmlApplicationContext找不到applicationContext.xml的问题

lgmsyy 2014-12-12 12:03:48
这段代码我直接写在main函数下,不启动TOMCAT,那么执行没问题。
ApplicationContext factory = new FileSystemXmlApplicationContext("WebRoot/WEB-INF/applicationContext.xml");

但是我启动TOMCAT后,通过WEB应用访问这段代码(比如通过监听定时或者SERVLER)为什么报错系统找不到指定的路径错误
Exception in thread "Timer-1" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [C:\Program Files\Apache Software Foundation\Tomcat 6.0\bin\WebRoot\WEB-INF\applicationContext.xml]; nested exception is java.io.FileNotFoundException: WebRoot\WEB-INF\applicationContext.xml (系统找不到指定的路径。)

为什么在启动TOMCAT后,程序要在TOMCAT下找applicationContext.xml,而不是在我的工程路径下找呢?


注意:如果写绝对路径以上都没问题,但项目要求我们不能写绝对路径


详细错误:Exception in thread "Timer-1" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [C:\Program Files\Apache Software Foundation\Tomcat 6.0\bin\WebRoot\WEB-INF\applicationContext.xml]; nested exception is java.io.FileNotFoundException: WebRoot\WEB-INF\applicationContext.xml (系统找不到指定的路径。)
...全文
878 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Runner6587 2014-12-12
  • 打赏
  • 举报
回复
引用 9 楼 lgmsyy 的回复:
FileSystemXmlApplicationContext只有写上全路径才可以,但部署时全路径是不行的。 如果用ClassPathXmlApplicationContext 只能读classes目录下, 但我的配置文件在WEB-INF下,到底该怎么访问才行啊 [quote=引用 3 楼 zxs6587 的回复:] web项目要发布到服务器中才能访问啊!所以程序要在TOMCAT下找applicationContext.xml!
我是这么配置TOMCAT的 <Service name="DbService"> 。。。。。 <Engine name="DbService" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> <Host name="localhost" appBase="DbService" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="/" docBase="D:/Workspaces/DbService/WebRoot/" debug="0" reloadable="true"/> </Host> </Engine> </Service> [/quote] ApplicationContext factory = new FileSystemXmlApplicationContext("WebRoot/WEB-INF/applicationContext.xml"); 这样写是相对目录!相对的是tomcat的运行目录! 也就是这个目录C:\Program Files\Apache Software Foundation\Tomcat 6.0\bin 那你就看看你的配置文件相对这个目录怎么找!不过要是在项目目录下D:/Workspaces/DbService/WebRoot/的话那就麻烦了得。。。。。。半天!直接把配置文件拷贝到C:\Program Files\Apache Software Foundation\Tomcat 6.0\bin得了 ! 或者直接使用ClassPathXmlApplicationContext加载!把配置文件拷到源文件目录下!
lgmsyy 2014-12-12
  • 打赏
  • 举报
回复
FileSystemXmlApplicationContext只有写上全路径才可以,但部署时全路径是不行的。 如果用ClassPathXmlApplicationContext 只能读classes目录下, 但我的配置文件在WEB-INF下,到底该怎么访问才行啊
引用 3 楼 zxs6587 的回复:
web项目要发布到服务器中才能访问啊!所以程序要在TOMCAT下找applicationContext.xml!
我是这么配置TOMCAT的 <Service name="DbService"> 。。。。。 <Engine name="DbService" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> <Host name="localhost" appBase="DbService" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="/" docBase="D:/Workspaces/DbService/WebRoot/" debug="0" reloadable="true"/> </Host> </Engine> </Service>
Runner6587 2014-12-12
  • 打赏
  • 举报
回复
引用 7 楼 lgmsyy 的回复:
[quote=引用 3 楼 zxs6587 的回复:] web项目要发布到服务器中才能访问啊!所以程序要在TOMCAT下找applicationContext.xml!
这个我当然知道哦。[/quote] 那什么意思??
lgmsyy 2014-12-12
  • 打赏
  • 举报
回复
引用 3 楼 zxs6587 的回复:
web项目要发布到服务器中才能访问啊!所以程序要在TOMCAT下找applicationContext.xml!
这个我当然知道哦。
lgmsyy 2014-12-12
  • 打赏
  • 举报
回复
引用 2 楼 zhangjihao 的回复:
ApplicationContext factory = new FileSystemXmlApplicationContext(System.getProperty("user.dir") + "/WebRoot/WEB-INF/applicationContext.xml");
之前试验过,就是不行啊
lgmsyy 2014-12-12
  • 打赏
  • 举报
回复
引用 4 楼 u010559460 的回复:
路径改下WebRoot/WEB-INF/applicationContext.xml 改成WEB-INF/applicationContext.xml 试下,
这个之前试验过,不成啊
踏 浪 2014-12-12
  • 打赏
  • 举报
回复
路径改下WebRoot/WEB-INF/applicationContext.xml 改成WEB-INF/applicationContext.xml 试下,
Runner6587 2014-12-12
  • 打赏
  • 举报
回复
web项目要发布到服务器中才能访问啊!所以程序要在TOMCAT下找applicationContext.xml!
howsun_zh 2014-12-12
  • 打赏
  • 举报
回复
ApplicationContext factory = new FileSystemXmlApplicationContext(System.getProperty("user.dir") + "/WebRoot/WEB-INF/applicationContext.xml");
lgmsyy 2014-12-12
  • 打赏
  • 举报
回复
有人知道吗?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧