Джерси / ServletContext и ресурс, загружающийся на запуске

Я являюсь довольно новым в веб-разработке с 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

8
задан Community 23 May 2017 в 11:44
поделиться

1 ответ

Я не знаком с Джерси, но, как правило, в веб-приложении Java я думаю, что правильным решением было бы создать ContextListener.

Слушатель контекста - это класс, который реализует интерфейс javax.servlet.ServletContextListener и настраивается в вашем web.xml. У него есть метод, который выполняется, когда приложение впервые загружается в ваш контейнер, и еще один, который выполняется, когда приложение останавливается, поэтому это идеальное место для размещения каких-то одноразовых материалов инициализации и очистки вещей перед приложение остановлено.

Итак, шаги следующие:

  1. создайте свой класс Listener, реализуйте метод contextInitialized (ServletContextEvent sce). В этом методе вы получаете ServeltContextEvent, у которого есть метод getServletContext (), который дает вам доступ к ServletContext.
  2. Сконфигурируйте прослушиватель в своем web.xml

Вы найдете дополнительную информацию здесь: учебник

Или на сайте Sun, э-э, Oracle.

Кстати, если ваш файл будет в JAR-файле, я не уверен, что метод ServletContext - лучший способ его загрузить. Думаю, вам лучше написать что-нибудь вроде:

this.getClass().getClassLoader().getResourceAsStream("com.company.my.file.properties");
7
ответ дан 5 December 2019 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: