3

我的问题是您认为很常见的问题,但到目前为止我还没有找到解决方案。

在 Tomcat 5.5 下构建 Java Web 应用程序(尽管要求它可以部署在任何地方,例如在 WebLogic 环境下,因此需要将资源作为流加载)。良好的做法要求将资源文件放在WEB-INF/classes下并使用 ClassLoader 的getResourceAsStream()方法加载。当您知道要加载的资源的名称时,一切都很好。

我的问题是我需要加载位于classes的子目录中的所有内容(包括递归地在非空子目录中)。

因此,例如,如果我在WEB-INF/classes下有以下内容:

文件夹X/文件夹Y

文件夹X/文件夹Y/fileA.properties

文件夹X/fileB.properties

我需要加载fileA.properties 和fileB.properties 类,但在启动应用程序之前实际上并不知道它们的名称(即我需要能够从WEB-INF/classes 下的任何目录中任意加载资源)。

最优雅的方法是什么?我可以查询什么对象来找到我需要的信息(每个所需资源的资源路径)?最好使用非 servlet 特定的解决方案(如果可能,将其全部保存在类加载框架中)。

提前致谢!

4

2 回答 2

2

据我所知,没有这样的能力,因为类加载器只尝试加载它被要求的东西。它不会预取类路径上的所有项目,也不会将它们视为目录结构。

我解决问题的方法是在构建时在所有相关资源的文本文件中创建一个目录列表,并将其包含在战争中,然后通过这种方式进行。

于 2009-05-26T05:07:28.350 回答
1

你可以用一些技巧来做到这一点:)

获取资源作为 URL,提取协议:

  • 文件协议 - 获取 URL 路径并且你有一个文件夹,扫描文件。
  • jar/zip 协议 - 提取 jar/zip 路径并使用 JarFile 浏览文件并提取路径/包下的所有内容。
于 2009-05-26T13:19:58.220 回答