我在JBoss 4.0.2中将servlet部署为战争。我有一个已部署应用程序的属性文件。我应该把这个文件放在哪里?在jboss server \ default \ conf文件夹中的conf目录下?如何以可移植的方式加载该属性文件?
答案 0 :(得分:17)
要以可移植方式加载该属性文件,最好的方法是将其放在Web应用程序的类路径中(在WEB-INF/lib/
下的JAR中或{{1}下的JAR中1}}或者在应用服务器类路径上,如果您希望能够编辑该文件而无需重新打包Web应用程序)并使用Class#getResourceAsStream(String)
。
以下代码获取属性文件的WEB-INF/classes/
,该文件与执行代码的servlet位于同一个包中:
InputStream
然后,将load(InputStream)
转换为Properties
对象(跳过异常处理):
InputStream inStream = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("myfile.properties");
答案 1 :(得分:5)
抓住servletContext然后
InputStream stream = getServletContext().getResourceAsStream("/WEB-INF/log4j.properties");
Properties props = new Properties();
props.load(stream);
无论你是部署战争还是爆炸战,这都会有效。
答案 2 :(得分:2)
如果属性文件可以与应用程序一起部署,则使其成为源树的一部分。这将导致属性文件位于WEB-INF / classes文件夹中。
然后可以使用
读取Properties properties = loadProperties("PropertyFileName.properties", this.getClass());
...
public static Properties loadProperties(String resourceName, Class cl) {
Properties properties = new Properties();
ClassLoader loader = cl.getClassLoader();
try {
InputStream in = loader.getResourceAsStream(resourceName);
if (in != null) {
properties.load(in);
}
} catch (IOException e) {
e.printStackTrace();
}
return properties;
}
答案 3 :(得分:1)
放置它的最佳位置是web-apps自己的doc-root,如“./WEB-INF/myapp.properties”,即相对于servlet容器解压缩.war
或{的位置{1}}文件。您可以直接在.ear
。
.war
有一个方法ServletContext
,它返回文件系统中的实际路径。使用真实路径,您可以将其加载到getRealPath(String path)
集合中。
<强>更新强> 注释中的代码尝试查找“/”的实际路径,您应该询问属性文件的相对路径,如:
Properties