English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Цикл жизни Servlet

Жизненный цикл Servlet можно определить как整个过程 от создания до уничтожения. Вот процесс, который следует Servlet:

  • Вызов после инициализации Servlet init () Метод.

  • Servlet Вызов Servlet метод для обработки запросов клиента.

  • Метод вызывается перед уничтожением Servlet  destroy() Метод.

  • В конце концов, Servlet перерабатывается мусорным сборщиком JVM.

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

Метод init()

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

Servlet создается при первом вызове URL, соответствующего этому Servlet, но вы также можете指定, чтобы Servlet был загружен при первом запуске сервера.

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

Определение метода init():

public void init() throws ServletException {
  // Код инициализации...
}

Метод service()

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

Каждый раз, когда сервер принимает Servlet-запрос, он создает новый поток и вызывает сервис. Метод 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
}

Метод doGet()

Запрос POST исходит от HTML-формы, которая особенно指定了 МЕТОД как POST, и обрабатывается методом doPost().

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

Метод destroy()

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

После вызова метода destroy() объект servlet помечается для переработки мусором. Метод destroy() определен следующим образом:

  public void destroy() {
    // Код終止...
  }

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

Ниже показана схема цикла жизни Servlet.

  • Первый到达 сервера HTTP-запрос делегируется контейнеру Servlet.

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

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