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

Java 使用getResourceAsStream在Tomcat的JAR中加载文件,java,jakarta-ee,tomcat,Java,Jakarta Ee,Tomcat,有没有办法从Tomcat应用程序中使用getResourceAsStream加载存储在JAR中的文件 我有一个库,它将它需要的所有文件连同编译的类一起放在它的jar中。此代码在独立应用程序中使用库时有效,但在使用PHP java桥的Tomcat内部使用库时无效 final InputStream stream = Object.class.getResourceAsStream("/styles/foo.xsl"); 我尝试使用问题中概述的解决方案,但没有成功,并将代码更改为 final Cl

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

我有一个库,它将它需要的所有文件连同编译的类一起放在它的jar中。此代码在独立应用程序中使用库时有效,但在使用PHP java桥的Tomcat内部使用库时无效

final InputStream stream = Object.class.getResourceAsStream("/styles/foo.xsl");
我尝试使用问题中概述的解决方案,但没有成功,并将代码更改为

final ClassLoader resourceLoader = Thread.currentThread().getContextClassLoader();
final InputStream stream = resourceLoader.getResourceAsStream("/styles/foo.xsl");
当库单独使用或在Tomcat中使用时,后一种代码都不起作用。在这两种情况下,stream==null

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


有人能推荐一段同时适用于Tomcat和非Tomcat应用程序的代码吗?

如果您在jar中有一个使用xsl的类文件,请尝试以下操作: final ClassLoader resourceLoader=com.mypackage.MyClassInJar.class.getClassloader; final InputStream stream=resourceLoader.getResourceAsStream/styles/foo.xsl

如果没有类,只需创建一个伪类


我认为这应该行得通,因为您将始终让类加载器负责jar。

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

如果没有类,只需创建一个伪类


我认为这应该行得通,因为您总是让类加载器负责jar。

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

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

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

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

建议使用。我是否应该向Tomcat管理员建议此更改?建议使用。我应该向Tomcat管理员建议这项更改吗?谢谢,效果很好。请您详细说明一下,对于不在类路径根上操作的类加载器,您是什么意思?您从某个类中获得的类加载器,正如您最初所做的那样,相对于该类的位置进行操作,并且可以采用相对路径或以/开头的路径。谢谢,这很好。您能详细说明一下,对于不在类路径根上操作的类加载器,您是什么意思吗?您最初从某个类中获得的类加载器是相对于该类的位置操作的,并且可以采用相对路径或以/开头的路径。