Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры-2 оопип часть 4.doc
Скачиваний:
46
Добавлен:
01.04.2014
Размер:
445.44 Кб
Скачать

81. Жизненный цикл сервлета

Жизненный цикл сервлета состоит из следующих шагов:

В случае отсутствия сервлета в контейнере.

Класс сервлета загружается контейнером.

Контейнер создает экземпляр класса сервлета.

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

Обслуживание клиентского запроса. Каждый запрос обрабатывается в своем отдельном потоке. Контейнер вызывает метод service() для каждого запроса. Этот метод определяет тип пришедшего запроса и распределяет его в соответствующий этому типу метод для обработки запроса. Разработчик сервлета должен предоставить реализацию для этих методов. Если поступил запрос, метод для которого не реализован, вызывается метод родительского класса и обычно завершается возвращением ошибки инициатору запроса.

В случае если контейнеру необходимо удалить сервлет, он вызывает метод destroy(), который снимает сервлет из эксплуатации. Подобно методу init(), этот метод тоже вызывается единожды за весь цикл сервлета.

82. Создание и компиляция исходного кода сервлета

Для построения сервлета разработчик должен написать класс, реализующий интерфейс javax.servlet.Servlet. Наряду с прочим, данный интерфейс содержит три метода, играющих важную роль с точки зрения методики J2EE: init(), service() и destroy().

import javax.servlet.*;

public SampleServlet implements Servlet {

ServletConfig servletConfig;

public void init(ServletConfig config) throws ServletException

{

servletConfig = config;

...

}

public void destroy() { ... }

public void service(ServletRequest req, ServletResponse res) { ... }

...

}

Информацию о запросе из объекта ServletRequest обычно извлекают либо в виде набора пар "название параметра - значение" (обычно используется для обработки различных форм HTML), либо в виде некого входного потока данных InputStream. Например, извлечение параметра с названием param, переданного из формы HTML, выглядит следующим образом:

public void service(ServletRequest req, ServletResponse res)

{

String par = req.getParameter("param"));

...

}

Чаще всего сервлет пишется таким образом, чтобы в ответ на запрос клиента в методе service() формировался некий документ. Содержимое этого документа передается в выходной поток данных OutputStream, предоставляемый объектом ServletResponse, для отправки клиенту. Заметим, что в ответ на запрос клиента сервлет может генерировать не только HTML страницы, но и данные любого другого типа, например, графические изображения или XML документы. Тип передаваемых материалов уточняется с помощью метода setContentType() объекта ServletResponse. По умолчанию подразумевается тип данных "text/html". Таким образом, метод service(), в ответ на запрос клиента генерирующий динамическую web-страницу, может выглядеть следующим образом:

public void service(ServletRequest req, ServletResponse res)

throws ServletException, IOException

{

res.setContentType("text/html");

PrintWriter out = res.getWriter();

out.println("");

out.println("");

...

out.println("");

out.println("");

out.close();

}