Учебники

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

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

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

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

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

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

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

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

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

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

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

Метод init ()

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

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

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

Определение метода init выглядит так:

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

Служба () Метод

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

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

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

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

Метод service () вызывается контейнером, а метод 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 () одного экземпляра сервлета.