【问题标题】:Getting FileNotFoundException in Spring在 Spring 中获取 FileNotFoundException
【发布时间】:2010-01-16 04:28:43
【问题描述】:

我想使用 BeanFactory 创建 bean,但遇到异常:java.io.FileNotFoundException: \\WEB-INF\businesscaliber-servlet.xml

Resource res = new FileSystemResource("//WEB-INF//businesscaliber-servlet.xml");
BeanFactory factory = new XmlBeanFactory(res);
if (factory != null && beanId != null) {
    obj = factory.getBean(beanId);
}

他正在使用这个

ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath*:/WEB-INF/businesscaliber-servlet.xml");

【问题讨论】:

    标签: java spring


    【解决方案1】:

    我认为您需要指定一个绝对路径,而不是指向FileSystemResource 的 Web 应用程序相对路径。

    尝试改用ServletContextResource

    Resource 实现为 ServletContext资源, 解释内的相对路径 Web 应用程序根目录。

    唯一的问题是你需要ServletContext 所以:

    ServletContext servletContext = ...
    Resource res = new ServletContextResource(servletContext,
      "/WEB-INF/businesscaliber-servlet.xml");
    BeanFactory factory = new XmlBeanFactory(res);
    if (factory != null && beanId != null) {
        obj = factory.getBean(beanId);
    }
    

    值得注意的是,理想情况下,您可以从ApplicationContext 中检索到它。来自4.4 Resource LoaderSpring Reference

    Resource template = ctx.getResource("some/resource/path/myTemplate.txt);
    

    返回的将是一个 ClassPathResource;如果一样 方法是针对 a 执行的 FileSystemXmlApplicationContext 例如,你会得到一个 FileSystemResource。为一个 WebApplicationContext,你会得到 返回ServletContextResource,然后 以此类推。

    因此,您可以将资源加载到 适合特定的时尚 应用程序上下文。

    所以这是检索资源的首选方法。

    另外,由于 /WEB-INF/ 在技术上位于类路径中,您可以使用 classpath: 前缀(根据您的评论)或使用 ClassPathXmlApplicationContext(这将自动返回类路径资源)。

    也没有必要输入双斜杠。不知道你为什么要这样做。也许是双反斜杠的保留,这是必要的?

    【讨论】:

    • 我可以使用这个 ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath*:/WEB-INF/businesscaliber-servlet.xml"); 找到解决方案;
    猜你喜欢
    • 1970-01-01
    • 2021-09-22
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多