Сервлеты - Жизненный цикл

Жизненный цикл сервлета можно определить как весь процесс от его создания до уничтожения. Ниже приведены пути, по которым следует сервлет.

  • Сервлет инициализируется вызовом init() метод.

  • Сервлет вызывает service() метод обработки запроса клиента.

  • Сервлет завершается вызовом destroy() метод.

  • Наконец, сервлет собирает мусор сборщиком мусора JVM.

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

Метод init ()

Метод init вызывается только один раз. Он вызывается только при создании сервлета и не вызывается впоследствии ни для каких пользовательских запросов. Таким образом, он используется для одноразовой инициализации, как и метод инициализации апплетов.

Сервлет обычно создается, когда пользователь впервые вызывает URL-адрес, соответствующий сервлету, но вы также можете указать, что сервлет загружается при первом запуске сервера.

Когда пользователь вызывает сервлет, создается один экземпляр каждого сервлета, при этом каждый пользовательский запрос приводит к созданию нового потока, который передается на doGet или doPost, в зависимости от ситуации. Метод init () просто создает или загружает некоторые данные, которые будут использоваться на протяжении всего срока службы сервлета.

Определение метода инициализации выглядит так -

public void init() throws ServletException {
   // Initialization code...
}

Метод service ()

Метод service () является основным методом выполнения фактической задачи. Контейнер сервлета (т.е. веб-сервер) вызывает метод service () для обработки запросов, поступающих от клиента (браузеров), и для записи отформатированного ответа обратно клиенту.

Каждый раз, когда сервер получает запрос на сервлет, сервер порождает новый поток и вызывает службу. Метод service () проверяет тип HTTP-запроса (GET, POST, PUT, DELETE и т. Д.) И при необходимости вызывает методы doGet, doPost, doPut, doDelete и т. Д.

Вот подпись этого метода -

public void service(ServletRequest request, ServletResponse response) 
   throws ServletException, IOException {
}

Метод service () вызывается контейнером, а метод службы вызывает методы doGet, doPost, doPut, doDelete и т. Д. В зависимости от ситуации. Таким образом, вы не имеете ничего общего с методом service (), но вы переопределяете doGet () или doPost () в зависимости от того, какой тип запроса вы получаете от клиента.

DoGet () и doPost () - это наиболее часто используемые методы в каждом запросе на обслуживание. Вот сигнатура этих двух методов.

Метод doGet ()

Запрос GET является результатом обычного запроса URL-адреса или HTML-формы, для которой не указан МЕТОД, и он должен обрабатываться методом doGet ().

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   // Servlet code
}

Метод doPost ()

Запрос POST является результатом HTML-формы, в которой POST указан как МЕТОД, и он должен обрабатываться методом doPost ().

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   // Servlet code
}

Метод destroy ()

Метод destroy () вызывается только один раз в конце жизненного цикла сервлета. Этот метод дает сервлету возможность закрыть соединения с базой данных, остановить фоновые потоки, записать списки файлов cookie или счетчик посещений на диск и выполнить другие подобные действия по очистке.

После вызова метода destroy () объект сервлета помечается для сборки мусора. Определение метода уничтожения выглядит так -

public void destroy() {
   // Finalization code...
}

Схема архитектуры

На следующем рисунке показан типичный сценарий жизненного цикла сервлета.

  • Сначала HTTP-запросы, поступающие на сервер, делегируются контейнеру сервлета.

  • Контейнер сервлета загружает сервлет перед вызовом метода service ().

  • Затем контейнер сервлета обрабатывает несколько запросов, порождая несколько потоков, каждый из которых выполняет метод service () одного экземпляра сервлета.