Spring 3.0没有找到applicationcontext.xml

时间:2012-01-05 16:56:20

标签: java spring servlets

我正在研究使用数据库存储系统的Web应用程序,我选择将dataAccess-applicationcontext与其余部分分开。但是,当我运行以下代码行时,它表示它不存在。

ApplicationContext ac = new ClassPathXmlApplicationContext("dataAccess-applicationContext.xml", UsageDataDAO.class);

我甚至将xml文件移动到同一目录只是为了得到与下面发布的相同的错误。

  

嵌套异常是java.io.FileNotFoundException:无法打开类路径资源[com / foobar / bar / foo / dataAccess-applicationContext.xml],因为它不存在

任何想法这里发生了什么?

4 个答案:

答案 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");