#java #tomcat #properties #jax-rs
#java #tomcat #свойства #jax-rs
Вопрос:
Я только начал настраивать веб-службу с jax-rs, работающую на Tomcat. Есть ли способ связать файл свойств с моим java-проектом (в eclipse), чтобы я мог считывать из него свойства во время выполнения? Также, если это возможно, где было бы лучшее место для его размещения (чтобы его нельзя было увидеть по URL), WebContent, WEB-INF и т. Д.?
Спасибо.
Комментарии:
1. Просто поместите его в classpath (WEB-INF/classes; в проекте maven src/resources является подходящим местоположением) и загрузите его с помощью classloader.
2. У меня нет проекта maven, будет ли достаточно WEB-INF / lib? Как будет выглядеть путь во время выполнения для свойств файла («WEB-INF / lib /jaxrs.properties»)
Ответ №1:
Несколько вариантов:
Вариант 1: вы можете поместить его в свой путь к классу (в Eclipse поместите его в папку и исходный код), чтобы вы могли получить к нему доступ через Classloader: MyClass.class.getResourceAsStream("myproperties.properites")
Обратите внимание, что MyClass также должен находиться в той же исходной папке (на самом деле это немного сложнее, он должен находиться в той же иерархии classloader, но любой класс из той же папки выполнит эту работу)
Вариант 2: поместите его в папку WEB-INF. Это предпочтительный вариант, поскольку вам не нужно иметь дело с classpath . Для доступа к нему вам понадобится ServletContext: javax.servlet.ServletContext.getResourceAsStream("WEB-INF/myproperties.properites")
В jax-rs вы можете получить ServletContext, используя аннотацию @Context в любом зарегистрированном ресурсе или поставщике.
Комментарии:
1. Если мой класс не является возвращаемым классом ресурсов, а скорее создается POJO (extends Authenticator), нужно ли мне физически передавать контекст сервлета из ресурса в его конструктор или через сеттер, или есть способ внедрить его туда?
2. Ну, если класс не создается с помощью JAX-RS, то JAX_RS вам здесь не поможет. Вам нужно будет сделать это вручную.
3. Я должен был сделать что-то вроде Someclass.class.getResourceAsStream(«.. / ../file.properties»), но это нужно будет изменить, если класс находится в другом пакете. Есть ли способ указать абсолютный путь к файлу, т.Е. /src/file.properties или что-то в этом роде?
4. Просто поместите файл свойств в корневой пакет, чтобы вы всегда могли написать: Someclass.class.getResourceAsStream(«file.properties»)
5. Как насчет случая, когда мне нужно записать файл?
Ответ №2:
Для пользователей GlassFish 3.1 я смог заставить работать оба параметра Tarlog, но мне пришлось использовать абсолютный путь к файлу. Для варианта 1 я поместил файл в папку исходных пакетов в NetBeans, к которой я затем мог получить доступ через:
InputStream is = TestResource.class.getResourceAsStream("/test_model.js");
Для варианта 2 я поместил файл в WEB-INF и использовал:
@Context ServletContext servletContext;
InputStream is = servletContext.getResourceAsStream("/WEB-INF/test_model.js");
Без косой черты результат был нулевым. HTH
Комментарии:
1. Есть ли способ использовать файл свойств или какой-либо пользовательский файл настроек для моей войны, который будет загружен при запуске, но не находится внутри проекта? например, /etc/myapp/file.conf