是否可以从JBoss容器中部署的所有.war文件中读取属性文件

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

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

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

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

-MB

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

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

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

我不认为阅读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

如果WAR文件作为文件夹展开,您应该可以使用

String basePath = getServletContext()。getRealPath(“/”);

如果WAR文件采用归档格式,则此方法可能无效

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

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

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