Циклопедия скорбит по жертвам террористического акта в Крокус-Сити (Красногорск, МО)

Сервлет

Материал из Циклопедии
Перейти к навигации Перейти к поиску

Сервлет — Java-класс, содержащий логику обработки данных запросов и формирование содержания ответов веб-приложений. Любой сервлет должен реализовывать интерфейс javax.servlet.Servlet, в котором объявлены методы, отвечающие за жизненный цикл сервлета. За управление сервлетами отвечает контейнер сервлетов (веб-контейнер).

Жизненный цикл[править]

Для того, чтобы приложение знало о существовании сервлета, он должен быть зарегистрирован в дескрипторе развёртывания с помощью тега <servlet>. Начиная с версии 3.0 спецификации сервлетов допустимо также использование аннотации @WebServlet.

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

Первым этапом жизненного цикла является загрузка класса сервлета, осуществляемая класслоадером. После загрузки осуществляется инстанцирование класса — создаётся объект сервлета, на котором затем вызывается метод init(ServletConfig config).

После выполнения логики метода init сервлет готов к выполнению основной работы — обработке запросов. Для каждого пришедшего на сервер запроса веб-контейнер определяет, какой из объявленных сервлетов должен быть вызван, и вызывает на этом сервлете метод service(ServletRequest req, ServletResponse res). Именно этот метод отвечает за обработку запросов и формирование ответов.

Когда жизненный цикл сервлета подходит к концу, контейнер сервлетов вызывает на нём метод destroy(). Данный метод содержит логику, которую необходимо выполнить перед удалением объекта сервлета. По окончанию работы метода сервлет становится доступным сборщику мусора. Удаление сервлета может произойти в связи с остановкой сервера или перезапуском приложения. Кроме того, большинство контейнеров сервлетов имеют возможность удалять давно неиспользуемые сервлеты в целях экономии памяти.

Методы интерфейса Servlet[править]

Метод Описание
void init(ServletConfig config) Метод, по умолчанию вызываемый единожды — сразу после создания объекта сервлета. Предназначен для выполнения предварительной подготовки сервлета — создания вспомогательных объектов, обработки параметров инициализации. В качестве атрибута передаётся объект ServletConfig, инкапсулирующий параметры инициализации, объявленные в дескрипторе развёртывания/аннотации @WebServlet
void service(ServletRequest req, ServletResponse res) Метод, содержащий логику формирования ответа на запрос. В качестве параметров получает объекты ServletRequest и ServletResponse, созданные контейнером сервлетов абстракции запроса и ответа. В соответствии со спецификацией, контейнер сервлетов каждый вызов метода service осуществляет в отдельном потоке.
void destroy() Метод, по умолчанию вызываемый единожды — перед удалением объекта сервлета. Может содержать, например, закрытие используемых ресурсов.
ServletConfig getServletConfig() Метод возвращает объект ServletConfig, инкапсулирующий параметры инициализации, объявленные в дескрипторе развёртывания/аннотации @WebServlet.
String getServletInfo() Данный метод должен возвращать информацию о сервлете.

Примеры сервлетов[править]

  • Наиболее общей реализацией протоколонезависимого сервлета является абстрактный класс GenericServlet, внутри которого определено поведение по умолчанию всех методов, кроме метода service.
  • Для работы по http предоставлен класс HttpServlet, в котором дополнительно введён ряд методов, таких, как doGet(), doPost() и прочие. В данном классе определена логика метода service, внутри которого определяется метод пришедшего http-запроса, после чего обработка запроса делегируется соответствующему do-методу.
  • Каждая JSP интерпретируется как сервлет.

Ссылки[править]