在 war 文件中找到独立部署或在 ear 中部署的资源(.txt 文件)

Find a resource (.txt file) in war file which is deployed standalone or in ear

我有一个 war 文件打包在 ear 中并部署了。这是结构:

EAR
-WAR
--input.txt
--META-INF
--WEB-INF
---classes
(and so on)

我正在尝试从 WEB-INF/classes 文件夹中的 类(例如 abc.xyz.Myclass)之一读取 input.txt。这是我尝试过的:

this.getClass().getClassLoader().getResourceAsStream("../../input.txt");

Thread.currentThread().getContextClassLoader().getResourceAsStream("../../input.txt");

我通过附加调试器尝试了几种路径,如“../input.txt”或“/input.txt”或仅 "input.txt"。但是每次我得到 NULL 作为 return 值(意味着它无法找到文件)。

无论 war 是独立部署还是打包在 ear 中,在 war 中访问该文件的正确方法是什么?请帮忙。

使用getResource()时,资源需要在类路径中。因此,您需要将 input.txt 放在 classes 目录下的某处。

这是因为 input.txt 在类路径之外,其中一个通常是 WEB-INF/classes/,并且您无法使用类加载器访问位于类路径之外的资源。

或者,如果代码可以访问 HttpServletRequest 对象:

    request.getServletContext().getResourceAsStream("/input.txt");

当然还有其他方法可以获取ServletContext实例。