Spring MVC在没有请求的情况下获取WEB-INF下的文件

mom*_*omo 24 spring spring-mvc

我试图获取一个文件(或目录)下 /WEB-INF/.../

在请求之外.我需要在服务器启动时加载的bean中.

我能找到的所有解决方案要么使用XML文件ClassPathXmlApplicationContext要么要求获取servlet上下文或使用当前正在执行的类.对我来说似乎很难看.

我怎么能得到一个File("/WEB-INF/myDir/").必须有办法,不!?

axt*_*avt 45

只要您的bean在Web应用程序上下文中声明,您就可以获得ServletContext(使用ServletContextAware或通过自动装配)的实例.

然后,您可以直接(getResourceAsStream(),getRealPath())或使用访问webapp目录中的文件ServletContextResource.

由momo编辑:

@Autowired
ServletContext servletContext;

... myMethod() { 
     File rootDir = new File( servletContext.getRealPath("/WEB-INF/myDIR/") );
}
Run Code Online (Sandbox Code Playgroud)

  • 'servletContext.getRealPath("/ WEB-INF/myDIR /")`的+1 (2认同)

mah*_*ara 8

我使用Spring DefaultResourceLoaderResource来读取WEB-INF或*.jar文件中的任何资源.像魅力一样工作.祝好运!

import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;

public static void myFunction() throws IOException {
    final DefaultResourceLoader loader = new DefaultResourceLoader();               
    LOGGER.info(loader.getResource("classpath:META-INF/resources/img/copyright.png").exists());             
    Resource resource = loader.getResource("classpath:META-INF/resources/img/copyright.png");           
    BufferedImage watermarkImage = ImageIO.read(resource.getFile());
}
Run Code Online (Sandbox Code Playgroud)

  • `DefaultResourceLoader` 无法在 WEB-INF 内部读取,为此您将需要 `ServletContextResource` (2认同)