繁体   English   中英

Java:访问war中的属性文件

[英]Java: Accessing properties file inside a war

我已经在StackOverflow中搜索了“战争中的属性”,但是没有一个结果适用于我的情况。

我正在使用Eclipse Galileo和GlassFish v3来开发一组Web服务。 我正在使用具有以下结构的“动态Web项目”

Src
-java_code_pkg_1
-java_code_pkg_2
-com.company.config
--configfile.properties WebContent
-META-INF
-WEB-INF
--log4jProperties
--web.xml
--applicationContext.xml
--app-servlet.xml

我想访问“java_code_pkg1”中的一个源文件中的“configfile.properties”。 我正在使用Spring Framework,一旦应用程序在服务器上启动,这个文件就会被实例化。

我试过以下没有运气

getResourceAsStream("/com.company.config/configfile.properties");
getResourceAsStream("/com/company/config/configfile.properties");
getResourceAsStream("com/company/config/configfile.properties");
getResourceAsStream("/configfile.properties");
getResourceAsStream("configfile.properties");

getResourceBundle(..) didn't work either.

当它不在WEB-INF / classes路径下时是否可以访问文件? 如果是的话怎么样?

谢谢

Properties props = new Properties();
props.load(this.getClass().getResourceAsStream("/com/company/config/file.properties"));

我在调试模式时工作。 我可以在调试器中看到这些值,但是在执行“props.load”行之后,在进入它下面的灯之前,我得到一个NullPointerException。

那是一个不同的问题。 至少现在我知道这是访问配置文件的方法。

谢谢您的帮助。

如果你在战争中,你的类路径“当前目录”是“WEB-INF / classes”。 简单地上升两个级别。

getResourceAsStream("../../com/company/config/configfile.properties");

这太可怕但它确实有效。 至少,它可以在tomcat,jboss和geronimo下工作,它今天起作用。

PS你的目录结构不是很清楚。 也许它是:

getResourceAsStream("../../com.company.config/configfile.properties");

检查WAR文件中属性文件的位置。 如果它位于com / company / config目录下的WEB-INF / classes目录中,则getResourceAsStream("com/company/config/configfile.properties")应该工作或getResourceAsStream(“如果配置文件不在WEB-INF下,这应该可以工作/ classes directoy

还可以尝试使用getClass()。getClassLoader()。getResourceAsStream。

您确定该文件包含在您的war文件中吗? 很多时候,war构建过程会过滤掉非.class文件。

一旦部署到服务器,路径是什么? 可以使用Scanner手动读入资源。 从包中的java文件,创建一个新文件(“../ applications /”)将获得一个指向{glassfish install} \\ domains \\ {domain name} \\ applications的文件。 也许你可以改变那个文件路径,引导你到你需要去的地方?

由于您使用的是Spring,因此请使用Spring中的Resource支持直接注入属性文件。

请参阅http://static.springsource.org/spring/docs/3.0.x/reference/resources.html

即使需要属性文件的类不是Spring管理的,您仍然可以访问ApplicationContext并使用它来加载资源

资源类似于classpath:settings.properties,假设您的属性文件被构建器拾取并放入war文件中。

您也可以直接从文档中注入:

<property name="template" value="classpath:some/resource/path/myTemplate.txt">

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM