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