Сервлеты - Жизненный цикл
Жизненный цикл сервлета можно определить как весь процесс от его создания до уничтожения. Ниже приведены пути, по которым следует сервлет.
Сервлет инициализируется вызовом 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 () одного экземпляра сервлета.