Java ServletContext.getResource从库中获取资源
我有一个jar文件test.jar,它位于WEB-INF/lib中,根目录中包含一个文件: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的链接,并引用了相关部分: 路径必须以/开头,并解释为相对
/
|- 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文件中(在实际情况中)。