在JBoss中部署的java servlet中加载属性文件作为战争

时间:2010-01-06 18:53:38

标签: java jboss properties

我在JBoss 4.0.2中将servlet部署为战争。我有一个已部署应用程序的属性文件。我应该把这个文件放在哪里?在jboss server \ default \ conf文件夹中的conf目录下?如何以可移植的方式加载该属性文件?

4 个答案:

答案 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