无法在Java Web应用程序中读取属性文件?

时间:2011-10-04 13:13:08

标签: java servlets properties

我正在尝试在我的java Web应用程序中读取属性文件。我试过这些解决方案:

Where to place and how to read configuration resource files in servlet based application?

Howto access properties file from Java EE web application?

但他们都没有为我工作。

这是我的应用程序的结构:

enter image description here

读取属性文件的代码放在A类中,即使我放置绝对路径它也不起作用。 A是普通的Java类。 但是如果读取属性代码放在servlet类中(ProcessRequest.java),那么一切都像魅力一样

以下是我使用的代码:

public class A {
    public A() {
        try {
            Properties p = new Properties();
            p.load(this.getClass().getClassLoader().getResourceAsStream("/a.properties"));
            String n = p.getProperty("name");
            System.out.println("name: " + n);
        } catch (Exception ex) {
            Logger.getLogger(A.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

您已将其放在servlets包中,但是您尝试从类路径根目录中获取它。前导/使路径相对于类路径根。

相应地修复路径:

p.load(this.getClass().getClassLoader().getResourceAsStream("/servlets/a.properties"));

或者,假设当前类已经在servlets包中:

p.load(this.getClass().getClassLoader().getResourceAsStream("a.properties"));

对具体问题

无关,以后可能会将WAR外部的属性文件移动到外部位置,这样可以轻松编辑文件而无需每次都重建/重新部署,然后我建议使用线程的上下文类加载器而不是当前类的类加载器。它适用于所有情况:

p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("servlets/a.properties"));

(请注意,这里的路径不需要以/开头,因为它始终与classpath root相关)

答案 1 :(得分:0)

构建应用程序后,您是否在WEB-INF/servlets下看到了属性文件。如果是,则尝试使用以下行。

p.load(getServletContext().getResourceAsStream("/WEB-INF/servlets/a.properties"));

而不是

p.load(this.getClass().getClassLoader().getResourceAsStream("/a.properties"));