我正在研究使用数据库存储系统的Web应用程序,我选择将dataAccess-applicationcontext
与其余部分分开。但是,当我运行以下代码行时,它表示它不存在。
ApplicationContext ac = new ClassPathXmlApplicationContext("dataAccess-applicationContext.xml", UsageDataDAO.class);
我甚至将xml文件移动到同一目录只是为了得到与下面发布的相同的错误。
嵌套异常是java.io.FileNotFoundException:无法打开类路径资源[com / foobar / bar / foo / dataAccess-applicationContext.xml],因为它不存在
任何想法这里发生了什么?
答案 0 :(得分:1)
如果没有所有细节,这很难调试,但它必须是两个问题之一。
首先,该文件确实不在您的类路径中。这是一个Web应用程序,因此在检查类路径时应考虑how your particular servlet container works。例如,在servlet环境中,WEB-INF不在类路径中,而是WEB-INF / classes。
其次,该文件位于您的类路径中,但您指的是错误的。根据您提供的信息,我不认为是这种情况,但这种可能性可以在以后扩展。
无论如何,您为什么要手动加载文件?您应该在web.xml中引用配置。如果您提供有关如何运行Web应用程序的更多详细信息,那么我们可以帮助您完成此部分。与此同时,这个例子可能是足够的信息。它说明了如何配置容器中所有Servlet和过滤器共享的根弹簧容器(配置特定的Servlet需要稍微不同的方法):
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config1.xml, /WEB-INF/config2.xml</param-value>
</context-param>
答案 1 :(得分:0)
请使用下划线dataAccess_applicationContext.xml编辑您的文件名,而不是dataAccess-applicationContext.xml。然后再试一次。
答案 2 :(得分:0)
尝试使用classpath *:前缀。 “classpath *:dataAccess-application-context.xml”如果它在根类路径中,则使用“classpath *:/ folderName / dataAccess-application-context.xml”
答案 3 :(得分:0)
您的第二个参数:
ApplicationContext ac =
new ClassPathXmlApplicationContext("dataAccess-applicationContext.xml",
UsageDataDAO.class);
包含 UsageDataDAO.class 。根据此类的弹簧javadoc,这是在 com / foobar / bar / foo / 中请求开始上下文搜索。
将 dataAccess-applicationContext.xml 放在 WEB-INF / classes 中,然后尝试:
ApplicationContext ac =
new ClassPathXmlApplicationContext("dataAccess-applicationContext.xml");
UsageDataDAO myDao = (UsageDataDAO) ac.getBean("MyDaoBeanName");