我设法将.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
答案 0 :(得分:0)
基本上,您的应用程序与JBoss容器在同一台机器上运行,因此访问本地文件系统上的文件应该是可能的,就像您访问自己的.properties文件一样。我不熟悉任何阻止你这样做的事情。
如果要访问 war文件中的文件,则需要使用java.util.zip包,因为war文件当然是普通的zip文件。只是一个友好的提醒。
答案 1 :(得分:0)
你可能需要做一些棘手的事情,比如通过JBoss MBeans。我意识到这很模糊,但考虑研究这种方法。这是一个如何从JBoss中的应用程序获取MBean服务器的链接(添加http://)www.jboss.org/community/wiki/FindMBeanServer(Stackoverflow阻止我粘贴链接)。我想你可以找到Jboss Web mbean,剥离所有Web应用程序mbeans,然后询问每个人的类加载器,然后继续做你已经提到的。
答案 2 :(得分: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")
for pom.xml
答案 3 :(得分:0)
如果WAR文件以文件夹形式展开,您应该可以使用
String basePath = getServletContext()。getRealPath(“/”);
如果WAR文件采用存档格式
,则此方法可能无效答案 4 :(得分:0)
您只能查找当前类路径中的资源。 Web容器的正常操作是为每个已部署的工件创建特定的类路径,而无需访问容器中部署的其他工件。
这对于避免使用foo-1.0.jar的工件A非意外地使用与工件B一起部署的foo-0.9.jar非常重要。
因此,您需要向容器寻求帮助。这反过来意味着您需要编写特定于容器的代码来执行此操作。这将使您依赖供应商 - 您可能不希望这样。