Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 модуль.docx
Скачиваний:
15
Добавлен:
02.11.2018
Размер:
92.62 Кб
Скачать

13.2. Структура и жизненный цикл сервлета

Сервлет — это обычный класс, методы которого вызываются веб-сервером при поступлении запросов от клиентов. Вся логика веб-приложения может выполняться самими сервлетами или же быть вынесена в отдельные классы.

Жизненный цикл сервлета включает следующие три этапа:

  • Инициализация. Выполняется при первом обращении клиента к сервлету. Веб-сервер создает экземпляр сервлета и вызывает у него метод init(), в котором разработчик может предусмотреть необходимую инициализацию.

  • Обработка запросов клиентов. При каждом запросе клиента веб-сервер вызывает у сервлета метод service(HttpServletRequest, HttpServletResponse). Этот метод, в зависимости от используемого клиентом HTTP-метода, вызывает у сервлета метод doGet, doPost или doHead (другие HTTP-методы практически не применяются). В сервлетах обычно перекрываются именно методы doGet, doPost, doHead (последний реже), хотя можно перекрыть и сам метод service. С помощью объекта HttpServletRequest сервлеты могут получить исчерпывающую информацию о запросе, а с помощью объекта HttpServletResponse они отправляют ответ клиенту.

  • Завершение работы сервлета. Этот этап обычно происходит, когда сервлет-контейнер заканчивает работу. В этом случае он прекращает принимать новые запросы и вызывает у всех созданных сервлетов метод destroy(). В этом методе разработчики могут предусмотреть любые необходимые завершающие операции (например, сохранение данных на диск или закрытие соединения с СУБД).

Структура класса сервлета соответствует указанным этапам:

public class ServletTemplate extends HttpServlet {

public void init() throws ServletException {

// инициализация (вызывается один раз)

}

public void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

// обработка запроса типа GET

}

public void doPost(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

// обработка запроса типа POST

}

public void destroy() throws ServletException {

// завершение работы (вызывается один раз)

}

}

Сервлетами всегда реализуется, по крайней мере, один из методов doGet и doPost (реже service). Методы init и destroy реализуются в случае необходимости.

Пример сервлета, который просто возвращает HTML-код (всегда один и тот же) на HTTP-запрос методом GET:

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class HelloServlet extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

res.setContentType("text/html; charset=UTF-8");

PrintWriter out = res.getWriter();

out.println("<html><body><h1>Здравствуй, мир! </h1></body></html>");

}

}

Чтобы сервлет работал и с POST-запросами, следует реализовать метод doPost. Часто из метода doPost просто вызывают метод doGet, если должна быть реализована одинаковая обработка обоих HTTP-методов:

public void doPost(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

doGet(req, res);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]