Как загрузить файл .properties в jsp - PullRequest
7 голосов
/ 17 июля 2009

Я дошел до этого:

private Properties logoUrls = new Properties();
logoUrls.load(new FileInputStream("channelLogos.properties"));

где channelLogos.properties находится в том же каталоге, что и мой JSP. Я получаю исключение FileNotFound. Где мое приложение на самом деле думает, что я подразумеваю под «channelLogos.properties», если не тот же каталог, что и JSP? Как определить правильный путь для загрузки файла свойств?

Ответы [ 5 ]

10 голосов
/ 17 июля 2009

Это сделает работу:

<%@page import="java.io.InputStream" %>
<%@page import="java.util.Properties" %>

<%
    InputStream stream = application.getResourceAsStream("/some.properties");
    Properties props = new Properties();
    props.load(stream);
%>

В любом случае, я действительно думаю, что вы должны иметь файл свойств в classpath и использовать сервлет

6 голосов
/ 17 июля 2009

Я бы хотел очень рекомендую прочитать о Сервлеты модели 2 . Я рекомендую его всем, кто все еще выполняет сервлеты модели 1, то есть выполняет «реальную работу» в JSP.

Что касается вашего вопроса: сначала добавьте файл свойств в путь к классу, затем прочитайте файл с помощью getResourceAsSttream:

Thread.currentThread().getContextClassLoader().getResourceAsStream("channelLogos.properties");

Есть много вариантов, конечно, и у каждого будет свой любимый.

4 голосов
/ 17 июля 2009

Когда вы говорите «тот же каталог, что и JSP», что именно вы подразумеваете под этим? Что ваш JSP находится где-то в, скажем, /mywebapp/somefolder/my.jsp, где mywebapp является корневым каталогом приложения, а файл свойств - /mywebapp/somefolder/channelLogos.properties?

Если это так, то, скорее всего, они НЕ находятся в одном каталоге. JSP был скомпилирован, и где он фактически расположен, может варьироваться в зависимости от контейнера сервлета. Лучше всего использовать ServletContext.getRealPath() в соответствии с предложением pkaeding , указав в качестве аргумента путь к файлу свойств относительно контекста веб-приложения. Используя приведенный выше пример:

private Properties logoUrls = new Properties();
logoUrls.load(new FileInputStream(servletContext.getRealPath("/somefolder/channelLogos.properties")));

При этом имейте в виду, что если вы настаиваете на размещении своих свойств в той же папке, что и JSP, вам следует позаботиться о том, чтобы ограничить их публичную доступность (если это не является намерением).

3 голосов
/ 17 июля 2009

Взгляните на ServletContext.getRealPath () . Это должно дать вам полный путь к файлу свойств.

0 голосов
/ 08 августа 2018

JSP работает в контейнере сервлета, поэтому его текущий рабочий каталог определяется контейнером. Обычно это каталог, в котором установлен контейнер, или каталог bin. В любом случае, это не то место, где вы хотите сохранить файл пользовательских свойств.

Есть 2 типичных подхода к тому, что вам нужно.

Первый подход хорош, если ваш файл является частью вашего приложения, и вы никогда не меняете его при развертывании. В этом случае прочитайте его из ресурсов:

props.load (GetClass (). GetResourceAsStream ())

или даже лучше

props.load (Thread.currentThread (). GetContextClassLoader (). GetResourceAsStream ())

*

Второй подход хорош, если вы хотите изменить свой файл свойств в среде развертывания

*. В этом случае поместите его где-нибудь в файловой системе вне вашего контейнера. Например, /opt/mycompany/conf/myproperties.properties в Linux или в любом другом месте, которое вам нравится. Теперь вы должны использовать абсолютный путь при создании FileInputStream.

Чтобы сделать систему лучше настраиваемой, вам не следует указывать путь к файлу конфигурации внутри кода. Лучше всего передать его приложению, используя системные свойства, например, добавить параметр, например -Dmycompany.conf = / opt / mycompany / myprops.properties, когда вы запускаете сервер приложений. Если вы хотите прочитать файл, сделайте следующее:

новый FileInputStream (System.getProperties ("mycompany.conf"))

Теперь конфигурацией вашей системы можно управлять независимо от развертывателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...