Не удается прочитать файл свойств в веб-приложении Java? - PullRequest
1 голос
/ 04 октября 2011

Я пытаюсь прочитать файл свойств в моем веб-приложении на Java. Я пробовал эти решения:

Где разместить и как читать файлы ресурсов конфигурации в приложении на основе сервлетов?

Как получить доступ к файлу свойств из веб-приложения Java EE?

Но никто из них не работал для меня.

Вот структура моего приложения:

enter image description here

Код, который читает файл свойств, помещен в класс A, и он не работал, даже если я указал абсолютный путь. А это нормальный класс Java. Но все работает как прелесть, если код свойств чтения находится в классе сервлета (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 ]

6 голосов
/ 04 октября 2011

Вы поместили его в пакет 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"));

(обратите внимание, что путь здесь не обязательно должен начинаться с /, потому что он всегда относительно корня пути к классам)

0 голосов
/ 04 октября 2011

Вы видите файл свойств в WEB-INF/servlets после сборки приложения. Если да, то попробуйте использовать следующую строку.

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

вместо этого

p.load(this.getClass().getClassLoader().getResourceAsStream("/a.properties"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...