Загрузите файл свойств в Java-сервлет, развернутый в JBoss как война - PullRequest
8 голосов
/ 06 января 2010

У меня есть сервлет, развернутый как война в JBoss 4.0.2. У меня есть файл свойств для развернутого приложения. Где я должен положить этот файл? В каталоге conf в папке jboss server \ default \ conf? Как загрузить этот файл свойств переносимым способом?

Ответы [ 4 ]

17 голосов
/ 07 января 2010

Чтобы загрузить этот файл свойств способом portable , лучшим способом было бы поместить его в classpath веб-приложения (либо в JAR под WEB-INF/lib/, либо под WEB-INF/classes/, либо на путь к классу сервера приложений, если вы хотите редактировать этот файл без переупаковки веб-приложения) и использовать Class#getResourceAsStream(String).

Следующий код получает InputStream для файла свойств, который находится в том же пакете, что и сервлет, в котором выполняется код:

InputStream inStream = Thread.currentThread().getContextClassLoader()
                 .getResourceAsStream("myfile.properties");

Затем load(InputStream) в объект Properties (пропуская обработку исключений):

Properties props = new Properties();
props.load(inStream);
5 голосов
/ 07 января 2010

Просто возьмите servletContext, а затем

InputStream stream = getServletContext().getResourceAsStream("/WEB-INF/log4j.properties");
Properties props = new Properties();
props.load(stream);

Это всегда будет работать, независимо от того, развернете ли вы войну или войну.

2 голосов
/ 07 января 2010

Если файл свойств можно развернуть вместе с приложением, сделайте его частью вашего исходного дерева. Это приведет к тому, что файл свойств будет находиться в папке 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;
}
1 голос
/ 06 января 2010

Лучшее место для его размещения - под собственным корневым каталогом веб-приложений, например "./WEB-INF/myapp.properties", то есть относительно того, где контейнер сервлета распаковал ваши .war или .ear файл. Вы можете предоставить файл свойств непосредственно в .war.

В ServletContext есть метод getRealPath(String path), который возвращает фактический путь в файловой системе. Используя реальный путь, вы можете загрузить его в коллекцию Properties.

Обновление Код в вашем комментарии пытается найти реальный путь для "/", вы должны запросить относительный путь к вашему файлу свойств, как в:

String propertiesFilePath = getServletContext().getRealPath("WEB-INF/application.properties");
Properties props = properties.load(new FileInputStream(propertiesFilePath));
...