Загрузите файл свойств в Java-сервлет, развернутый в JBoss как война

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

4 ответа

Решение

Чтобы загрузить этот файл свойств переносимым способом, лучше всего поместить его в 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);

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

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

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

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

Лучшее место для его размещения - под собственным корневым каталогом веб-приложений, например "./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));
Другие вопросы по тегам