Я являюсь довольно новым в веб-разработке с Java. Я разрабатываю веб-сервис, и я выбрал REST / Джерси для него.
Я хочу к init некоторый материал на запуске сервиса и сохранять их все время по жизни сервиса.
Первый вопрос: Является конструктор Сервлета Джерси хорошим местом, чтобы сделать это?
В основном то, что я хочу сделать, должно загрузить файл config.ini, расположенный в моем каталоге WEB-INF. После этой справки я понимаю, что мне нужен ServletContext для загрузки моего файла как ресурса.
Однако мне не ясно, как получить этот ServletContext в Сервлете Джерси, поскольку это не действительно экземпляр сервлета, а скорее POJO с некоторыми аннотациями. Я хотел попробовать эту подсказку, но атрибут "контекст" является неопределенным в конструкторе. Я думаю, что Джерси мог бы заполнить его после конструктора. Право?
Таким образом, как правильный путь состоит в том, чтобы сделать это?
Вот мой код до сих пор:
/** Main REST servlet */
@Path("/")
public class Servlet {
// ----------------------------------------------------
// Constants
// ----------------------------------------------------
static private final String CONFIG_PATH = "/WEB-INF/config.ini";
// ----------------------------------------------------
// Attributes
// ----------------------------------------------------
/** Context */
@Context ServletContext context;
// ----------------------------------------------------
// Constructor
// ----------------------------------------------------
/** Init the servlet */
public Servlet() {
// Load config.ini from WEB-INF
Config.config = new Config(
this.context.getResourceAsStream(CONFIG_PATH));
// FAIL! this.context is null ...
}
// ----------------------------------------------------
// URI Handlers
// ----------------------------------------------------
/** Welcome page */
@GET
@Path("/")
@Produces(MediaType.TEXT_HTML)
public String welcome() {
return "Hi there.
";
}
}
Любая справка очень ценилась бы.Заранее спасибо,
Raphael
Я не знаком с Джерси, но, как правило, в веб-приложении Java я думаю, что правильным решением было бы создать ContextListener.
Слушатель контекста - это класс, который реализует интерфейс javax.servlet.ServletContextListener и настраивается в вашем web.xml. У него есть метод, который выполняется, когда приложение впервые загружается в ваш контейнер, и еще один, который выполняется, когда приложение останавливается, поэтому это идеальное место для размещения каких-то одноразовых материалов инициализации и очистки вещей перед приложение остановлено.
Итак, шаги следующие:
Вы найдете дополнительную информацию здесь: учебник
Или на сайте Sun, э-э, Oracle.
Кстати, если ваш файл будет в JAR-файле, я не уверен, что метод ServletContext - лучший способ его загрузить. Думаю, вам лучше написать что-нибудь вроде:
this.getClass().getClassLoader().getResourceAsStream("com.company.my.file.properties");