Мне развернули сервлет как войну в JBoss 4.0.2. У меня есть файл свойств для развертываемого приложения. Куда я должен поместить этот файл? В соответствии с conf каталогом в jboss server\default\conf папка? Как я загружаю тот файл свойств портативным способом?
Загрузить этот файл свойств портативным способом, лучшим способом будет поместить его в classpath веб-приложения (либо в JAR под WEB-INF/lib/
или под WEB-INF/классы/
, либо в classpath сервера приложений, если вы хотите иметь возможность редактировать этот файл без переупаковки веб-приложения) и использовать Class#getResourceAsStream(String)
.
Следующий код получает InputStream
для файла свойств, который находится в том же пакете, что и сервлет, в котором выполняется код:
InputStream inStream = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("myfile.properties");
Затем, load(InputStream)
it в Properties
object (пропуская обработку исключений):
Properties props = new Properties();
props.load(inStream);
] Лучшее место для размещения - под собственным doc-root web-приложений, например "./WEB-INF/myapp.properties", т.е. относительно того, где контейнер сервлета распаковал ваш [].war[
] или [].ear[
] файл. Вы можете предоставить файл свойств непосредственно в файле [].war[
].[
] В []ServletContext[
] есть метод []getRealPath(String path)[
], который возвращает реальный путь в файловой системе. Используя реальный путь, вы можете загрузить его в коллекцию []Properties[
].[
][]Update[]. Код в вашем комментарии пытается найти реальный путь к "/", вы должны спросить относительный путь к вашему файлу свойств, так как в:[
] [String propertiesFilePath = getServletContext().getRealPath("WEB-INF/application.properties");
Properties props = properties.load(new FileInputStream(propertiesFilePath));
] Просто возьмите servletContext и тогда
InputStream stream = getServletContext().getResourceAsStream("/WEB-INF/log4j.properties");
Properties props = new Properties();
props.load(stream);
Это всегда будет работать, независимо от того, развертываете ли вы войну или взрывную войну.
Если файл свойств может быть развернут вместе с приложением, сделайте его частью дерева исходных текстов. В результате файл свойств окажется в папке WEB-INF/классы.
Это можно прочитать, используя
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;
}