Java ServletContext.getResource从库中获取资源

Java ServletContext.getResource从库中获取资源,java,tomcat,jakarta-ee,jar,Java,Tomcat,Jakarta Ee,Jar,我有一个jar文件test.jar,它位于WEB-INF/lib中,根目录中包含一个文件: / |- test.jsp 现在我想从代码中的某个地方访问此文件: this.getServletContext().getResource("/test.jsp"); 但是结果总是空的,尽管getResource的文档声明也搜索WEB-INF/lib中的jar文件: 我是否遗漏了什么,或者为什么我无法获取资源?您已经提供了指向javadoc的链接,并引用了相关部分: 路径必须以/开头,并解释为相对

我有一个jar文件test.jar,它位于WEB-INF/lib中,根目录中包含一个文件:

/
|- test.jsp
现在我想从代码中的某个地方访问此文件:

this.getServletContext().getResource("/test.jsp");
但是结果总是空的,尽管getResource的文档声明也搜索WEB-INF/lib中的jar文件:


我是否遗漏了什么,或者为什么我无法获取资源?

您已经提供了指向javadoc的链接,并引用了相关部分:

路径必须以
/
开头,并解释为相对于当前上下文根,或相对于web应用程序的
/web-INF/lib
目录中JAR文件的
/META-INF/resources
目录

因此,它被解释为相对于jar文件中的
/META-INF/resources
文件夹

但是,您用一个标记表示您正在使用Tomcat。的Tomcat实现有些不同。它甚至没有提到在jar文件中搜索资源

建议:如果要使用
ServletContext.getResource()
访问资源,请不要将资源放在jar文件中。如果确实需要将它们放入jar文件中,则使用
Class.getResource()
方法,例如,将一个可选的空类放入jar文件中,并使用该类访问/加载资源,例如:

Jar内容:

/
|- SomeClass.class
|- test.jsp
访问
test.jsp的Java代码

SomeClass.class.getResource("/test.jsp"); // or it can even be "test.jsp"

您可以使用线程的类加载器将文件作为
InputStream
获取,如下所示:

Thread.currentThread().getContextClassLoader().getResourceAsStream("test.jsp");

方法
getResourceAsStream()
适用于类路径中的任何文件,无论是在目录中还是在JAR中。

Ouch。。。谢谢你给我指了那个。但我将目录更改为/META-INF/resources/test.jsp,但从getResource中仍然只能得到null。编辑我的答案后,Tomcat似乎有所不同。我已经注意到Tomcat,更不用说他们文档中的jar扫描了,但我也尝试了Resin 4,它在那里也不起作用。我尝试了虚拟类,它很有效。但是我不能使用它,因为我不知道资源在哪个jar文件中(在实际情况中)。