使用getResourceAsStream在Tomcat中的JAR中加载文件

时间:2011-10-16 17:22:16

标签: java java-ee tomcat

有没有办法从Tomcat应用程序使用getResourceAsStream加载存储在JAR中的文件?

我有一个库,它将所需的所有文件放在它的jar中,以及编译的类。当库在独立应用程序中使用时,此代码可以工作,但在Tomcat中使用库时(使用PHP java-bridge)则不行。

final InputStream stream = Object.class.getResourceAsStream("/styles/foo.xsl");

我尝试但没有成功使用问题getResourceAsStream not loading resource in webapp中概述的解决方案并将代码更改为

final ClassLoader resourceLoader = Thread.currentThread().getContextClassLoader();
final InputStream stream = resourceLoader.getResourceAsStream("/styles/foo.xsl");

后者代码在独立使用库或在Tomcat中使用库时都不起作用。在这两种情况下stream == null

我尝试加载的文件正确存储在/styles/foo.xsl中的JAR中。包含所有类和其他文件的JAR是tomcat/webapps/iJavaBridge/WEB-INF/lib/

有人可以建议一段在Tomcat和非Tomcat应用程序中都有效的代码吗?

2 个答案:

答案 0 :(得分:5)

您需要从路径中删除前导斜杠。这只适用于不在类路径根目录上运行的类加载器。

final ClassLoader resourceLoader = Thread.currentThread().getContextClassLoader();
final InputStream stream = resourceLoader.getResourceAsStream("styles/foo.xsl");

答案 1 :(得分:0)

如果你在jar中使用xsl获得了一个类文件,请尝试以下操作: final ClassLoader resourceLoader = com.mypackage.MyClassInJar.class.getClassloader(); final InputStream stream = resourceLoader.getResourceAsStream(“/ styles / foo.xsl”);

如果没有类,只需创建一个虚拟类。

我认为这应该有效,因为你总是得到负责jar的类加载器。