如何通过在SpringMVC中使用PathMatchingResourcePatternResolver来读取/ WEB-INF /中的文件,而不是在类文件夹中?

时间:2013-03-04 09:00:52

标签: spring

Spring:3.2.0.RELEASE

我打算阅读的文件位于/WEB-INF/resources/test.dat

代码如下:

 @javax.annotation.Resource(name = "pathMatchingResourcePatternResolver")
 private PathMatchingResourcePatternResolver resolver;
 ...
 ...
 Resource resource2 = resolver.getResource("/WEB-INF/resources/test.dat");
    try {
        File file = resource2.getFile();
    } catch (IOException e) {
        e.printStackTrace();
    }

来自PathMatchingResourcePatternResolver的文档,它描述了:and simple unprefixed paths such as "/WEB-INF/context.xml".

但实际上它会导致错误:java.io.FileNotFoundException: class path resource [resources/test.dat] cannot be resolved to URL because it does not exist

有谁知道问题是什么?!

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题并发现了问题。问题在于,默认PathMatchingResourcePatternResolver使用DefaultResourceLoader来实际加载资源。 DefaultResourceLoader假设资源来自类路径,并且它无法处理Web应用程序。要解决此问题,您需要设置另一个ResourceLoader实现(例如ServletContextResourceLoader)。但是,恕我直言,最好使用ApplicationContext加载资源(是的,它可以做到!)。只需@Autowire它或实施ApplicationContextAware

答案 1 :(得分:-1)

如果这是一个maven项目。而不是将此文件放在/ WEB-INF / resource文件夹中,而是将其放入/ src / main / resources文件夹中。此文件夹中的资源将添加到类路径中。 所以你可以使用类似的东西:

Thread.currentThread().getContextClassLoader().getResourceAsStream("test.dat");

这样可行。