Главная » Java, Web » Жизненный цикл сервлета

0

Сервлет загружается сервером и выполняется в контексте сервера. Сервер может удалить сервлет. При загрузке сервлета сервер вызывает метод init о . Во время загрузки сервлета не используется возможность многопоточного выполнения задач, решаемых сервлетом, даже в обычных условиях многопоточного серверного окружения. Метод init () вызывается только один раз и может быть вызван вновь только при перезагрузке сервлета. Сервер не может перезагрузить сервлет до тех пор, пока сервлет не будет удален с сервера при помощи метода destroy (). Инициализация сервлета должна завершиться до того, как будет вызван метод service (). После инициализации сервлет способен принимать и обрабатывать клиентские запросы. Запросы обрабатываются методом service (). Каждый клиентский запрос приводит к вызову метода service (), который выполняется в отдельном для каждого запроса потоке. Метод получает клиентский запрос и посылает ответ. Сервлет может выполнять несколько методов service () одновременно. При этом важно иметь в виду, что метод service () должен быть создан так, чтобы его выполнение в нескольких потоках одновременно не приводило к ошибкам, в частности здесь будет полезным применение синхронизации. Если сервлет не должен производить многопоточные вычисления, то сервлет может имплементировать интерфейс singieThreadModei. При этом сервер не сможет вызвать несколько потоков выполнения метода service ().

Сервлет работает на сервере до тех пор, пока он не будет удален с сервера. Это может произойти по требованию администратора. Перед удалением сервлет выполняет метод destroy (). Методы выполняется только один раз. Во время выполнения этого метода, метод service () в отдельном потоке может продолжать работу. При этом, если метод destroy () производит зачистку, касающуюся совместных ресурсов (например, требуется закрыть сетевую связь), доступ к которым может быть осуществлен из выполняющегося параллельно метода service (), то следует синхронизировать такие обращения к разделенным ресурсам.

По сути сервлет — это экземпляр класса, имплементирующего интерфейс javax.servlet.Servlet. Многие сервлеты используют стандартную имплементацию этого интерфейса, а именно классы j avax.servlet.GenericServlet И javax.servlet.http.HttpServlet. Bo время инициализации сервлета сервер загружает класс сервлета (при необходимости также и другие классы), для чего используется конструктор, который не имеет аргументов. Затем вызывается метод init (Servietconfig config). Объект типа serverconfig может быть использован в дальнейшем, для этого вызывается метод getservietconfig (). Если сервлет создается на основе класса GenericServlet (или его подкласса HttpServlet), то следует вызвать метод super. init (config), расположив его в самом начале метода init о сервлета. Объект servietconf ig содержит параметры сервера и ссылку на servlet Context. После инициализации вызывается метод service(ServletRequest req, ServletResponse res). Этот метод ВЫЗЫВается всякий раз при поступлении клиентского запроса. Схема жизненного цикла сервлета представлена на рис. 4.3.

Рис. 4.3.

Источник: Будилов В. А. Интернет-программирование на Java. — СПб.: БХВ-Петербург, 2003. — 704 е.: ил.

По теме:

  • Комментарии