2

我已经设法将 .war 部署到包含并读取位于 /META-INF/groupid-dir/artifactid-dir/ 下的 pom.properties 的 Jboss Web 容器

为了访问该文件,我在同一战争中的 JSP 中使用了以下代码:

ServletContext servletContext = getServletConfig().getServletContext(); 
InputStream in = servletContext.getResourceAsStream("META-INF/maven/groupid-dir/artifactid-dir/pom.properties");

这工作得很好。但我希望能够从容器中部署的所有 .war 动态读取 pom.propertes。这是可能的还是我只能访问我的 jsp 的一个战争持有者的上下文?

-mb

4

5 回答 5

0

您可能需要做一些棘手的事情,比如通过 JBoss MBean。我意识到这很模糊,但请考虑研究这种方法。这是关于如何从 JBoss 中的应用程序获取 MBean 服务器的链接(添加 http://)www.jboss.org/community/wiki/FindMBeanServer(Stackoverflow 阻止我粘贴链接)。我想您可以找到 Jboss Web mbean,剥离所有 Web 应用程序 mbean,然后向每个请求其类加载器,然后继续执行您已经提到的操作。

于 2009-05-20T14:33:43.317 回答
0

我不认为阅读 zip 或使用 jboss mbean 是正确的方法。我认为这并不棘手,并且您使用ServletContext.getResourceAsStream.

您可能可以使用ServletContext.getResourcePaths,但似乎多次使用来识别子目录 groupid 和 artifactid。就像是

servletContext.getResourceAsStream(servletContext.getResourcePaths(
    (String) servletContext.getResourcePaths("/META-INF/maven/")
               .iterator().next())
  .iterator().next() + "pom.properties")

或者

servletContext.getResourceAsStream(servletContext.getResourcePaths(
    (String) servletContext.getResourcePaths("/META-INF/maven/")
               .iterator().next())
  .iterator().next() + "pom.xml")

对于 pom.xml

于 2009-07-23T21:51:31.210 回答
0

如果 WAR 文件被分解为文件夹,您应该可以使用

String basePath=getServletContext().getRealPath("/");

如果 WAR 文件为存档格式,此方法可能不起作用

于 2012-04-18T12:14:38.423 回答
0

您只能在当前类路径中查找资源。Web 容器的正常操作是为每个已部署的工件创建特定的类路径,而无需访问容器中部署的其他工件。

这对于避免使用 foo-1.0.jar 的工件 A 避免意外使用与工件 B 一起部署的 foo-0.9.jar 非常重要。

因此,您需要向容器寻求帮助。这反过来意味着您需要编写容器特定的代码来执行此操作。这将使您依赖供应商——您可能不希望这样。

于 2012-09-16T08:42:54.387 回答
0

基本上,您的应用程序与 JBoss 容器在同一台机器上运行,因此应该可以访问本地文件系统上的文件,就像您访问自己的 .properties 文件一样。我不熟悉任何应该阻止你这样做的东西。

如果要访问war 文件的文件,则需要使用java.util.zip 包,因为war 文件当然是普通的zip 文件。只是一个善意的提醒。

于 2009-05-14T21:33:35.093 回答