如何从ear/war/jar文件中读取文件?

3

我有一个包含另一个WAR的EAR文件。项目结构如下所示:

project.ear
 |-- lib
 |-- META-INF
 |-- project-web.war
 |    |-- META-INF
 |    |-- WEB-INF
 |    |    |-- classes
 |    |    |    `-- com
 |    |    |         `-- example
 |    |    |              `-- services
 |    |    |                   `-- ListPageService.class
 |    |    |-- lib
 |    |    |-- web.xml
 |    |    `-- weblogic.xml
 |    `-- content.html
 `-- project-services.jar

在WAR中,有一个JAX-RS类ListPageService需要读取content.html文件。我该如何访问那个文件?

你的树不正确;类文件应该位于content.war/WEB-INF/classes中。那么你的war文件中,content.html精确在哪里? - Gimby
2个回答

3
获取WAR文件中的资源通常使用ServletContext.getResourcegetResourceAsStream方法。在JAX-RS类中,您可以通过声明一个使用javax.ws.rs.core.Context注解的字段来访问ServletContext
@Context ServletContext servletContext;

然后在请求处理方法中,您可以这样说:
URL content = servletContext.getResource("/content.html");
// alternatively
// InputStream content = servletContext.getResourceAsStream("/content.html");

2

编辑:由于问题的形式已经改变,因此此答案不再适用。建议的方法仅适用于获取类路径中的资源。

查看Class.getResourceAsStream方法。它允许您访问在类路径中找到的文件。


谢谢,但我遇到了下一个问题:如果我运行getClass().getResourceAsStream("."),绝对路径是C:\Oracle\middleware\user_projects\domains\base_domain\servers\AdminServer\tmp_WL_user\project-ear\7epkmz\war\WEB-INF\lib_wl_cls_gen.jar。这个jar文件只包含*.class文件,没有原始WAR中的静态内容。有什么想法吗? - Alex
您指定的名称是相对于类的位置的。当名称以 / 开头时,可以覆盖此行为。要在您的示例中获取文件,请使用“/content.html”。 - Henry
Web内容资源根本不在类路径中。我完全不明白为什么这个答案已经得到了4个赞。 - BalusC
这是因为问题在此期间已被编辑,资源先前位于类路径中。 - Henry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接