
- •Харьковский Национальный Университет Радиоэлектроники Кафедра Инфокоммуникационной инженерии
- •Содержание
- •Литература
- •Распределенные многоуровневые приложения
- •Понятие Web-компонента и Web-контейнера
- •Понятие сервлета
- •Функции сервлетов
- •Жизненный цикл сервлета
- •Класс HttpServlet
- •GET или POST?
- •Интерфейс HttpServletRequest
- •Извлечение данных из запроса
- •Интерфейс HttpServletResponse
- •Типы ответов сервлета
- •Установка данных ответа
- •Обращение к сервлету
- •Передача обработки в другие сервлеты
- •Редирект
- •Использование объектов сервлетов при обработке запросов
- •SingleThreadModel
Харьковский Национальный Университет Радиоэлектроники Кафедра Инфокоммуникационной инженерии
Технологии разработки web-приложений с использованием Java EE
Доцент кафедри ИКИ Евдокименко Марина Александровна
2017

Содержание
1.Понятие сервлетов.
2.Функции сервлетов.
3.Типы ответов сервлета.
4.Использование объектов сервлетов при обработке запросов.
Литература
1.Java. Промышленное программирование : практ. пособие / И.Н. Блинов, В.С. Романчик. – Минск : УниверсалПресс, 2007. Гл. 17-22. стр. 414-535
2.Герберт Шилдт "Java 7. Полное руководство" (8-е издание) Гл. 32. стр. 1003-1027.
3.The Java EE 7 Tutorial. http://docs.oracle.com/javaee/7/tutorial/doc/
4.Documentation bundle for the Apache Tomcat Servlet/JSP container
http://tomcat.apache.org/tomcat-7.0-doc/

Распределенные многоуровневые приложения
Платформа Java EE использует распределенную многоуровневую модель приложений.
1.Компоненты клиентского уровня работают на клиентской машине.
2.Компоненты Web-уровня работают на J2EE-сервере.
3.Компоненты бизнес-уровня работают на J2EE-сервере.
4.Программное обеспечение уровня корпоративной информационной системы (EIS) работает на EIS- сервере.
Хотя J2EE-приложение состоит из трех или четырех уровней, показанных на рисунке, многоуровневые J2EE-приложения обычно принято называть трехуровневыми,
т.к. они расположены на трех различных системах: клиентский компьютер, сервер J2EE и сервер базы данных или обычный сервер. Трехуровневые приложения, работающие данным способом, расширяют стандартную архитектуру клиент-сервер, добавляя многопоточный сервер приложений между клиентской частью и сервером базы данных.
Понятие Web-компонента и Web-контейнера
Согласно спецификации J2EE Web-компонентами являются
•Сервлеты
•Фильтры
•Слушатели событий
•JSP-страницы,
которые могут отвечать на HTTP-запросы Web-клиентов.
Управление работой web-компонентов возлагается на Web-контейнер
Web-контейнер – стандартизованный компонент, который занимается системной поддержкой Web-компонентов и обеспечивает их жизненный цикл в соответствии с правилами, определенными в спецификациях
Функции Web-контейнера:
•Управление жизненным циклом компонентов
•Перенаправление запросов
•Управление конкурентным доступом
•Управление безопасностью
Понятие сервлета
Сервлет - это самостоятельный компонент, который функционирует в web- контейнере, динамически генерируя HTML-страницу, XML-документ или другие данные в ответ на полученный от клиента запрос.
Спецификация технологии сервлетов находится по адресу https://jcp.org/en/jsr/detail?id=340
Последняя версия спецификации – 3.1
Сервлет не имеет привязки к определенному контейнеру
Взаимодействие с клиентом только через контейнер
API сервлетов не ориентировано на какой-либо протокол
Сервлет с точки зрения Java
– это класс, расширяющий абстрактный класс javax.servlet.GenericServlet, который реализует интерфейс javax.servlet.Servlet
Подкласс для протокола HTTP: javax.servlet.http.HttpServlet
Для работы и компиляции требуются классы поддержки сервлетов (j2ee.jar или servlet.jar)
В Apache Tomcat 7 по адресу /lib/servlet-api.jar
Функции сервлетов
Чтение данных, переданных пользователемНапример, из HTML-форм
Просмотр информации о запросе, которая встроена в HTTP-запросСведения о возможностях браузера, cookies, имени хоста клиента,
делающего запрос, и т.д.
Обращение к компонентам бизнес-логики и получение результатов
Генерация ответа
Возможность генерации бинарных данных
Установка параметров HTTP-ответа
Возвращение ответа клиенту
Жизненный цикл сервлета
Жизненный цикл сервлета управляется контейнером, в котором сервлет был развернут.
Когда запрос отображается на сервлет, контейнер выполняет следующие шаги:
Если экземпляр сервлета не существует, Web-контейнер:
Загружает класс сервлета
Создает экземпляр класса сервлета
Инициализирует экземпляр сервлета, вызывая метод init()
Вызывает метод service(), передавая ему объекты запроса и ответа. Для каждого нового клиента при обращении к сервлету создается независимый поток, в котором производится вызов метода service(). Метод service() предназначен для одновременной обработки множества запросов.
Если контейнеру нужно удалить сервлет, он его финализирует, вызывая метод destroy(), в теле которого следует помещать код освобождения занятых сервлетом ресурсов.

Класс HttpServlet
Предназначен для обработки запросов по протоколу HTTP
Метод service() класса HttpServlet вызывает один из методов doXxx(), в зависимости от типа запроса:
doGet(HttpServletRequest req, HttpServletResponse resp) – предназначен для обработки GET-запросов
doPost(HttpServletRequest req, HttpServletResponse resp) – предназначен для
обработки POST-запросов |
|
|
|
doPut(…) |
|
|
|
doDelete(…), и др. |
|
doGet(request, response) |
|
Одинаковая обработка GET и POST: |
GET |
||
|
GET
service(request, response)
POST
POST |
doPost(request, response) |
|
Не рекомендуется переопределять метод service(). Для этого лучше поместить обработчик в doGet(), а в doPost() просто вызвать doGet()
GET или POST?
GET передает данные серверу используя URL, тогда как POST передает данные, используя тело HTTP запроса.
http://host/path/resource?param1=value1¶m2=value2
POST /path/resource HTTP/1.1 <Различные заголовки> Content-Length: 25 <Различные заголовки> login=admin¶m1=qwerty
Длина URL'а ограничена в разных браузерах (примерно 1024 символами), это и будет верхним ограничением для данных, которые можно отослать GET'ом.
POST может отправлять гораздо большие объемы данных. Лимит устанавливается веб-сервером и обычно равен около 2MB.
Передача данных методом POST чуть более скрытна, чем методом GET, так как данные не отображаются напрямую в web-клиенте пользователя (в отличии от URL, который явно виден в строке браузера). Однако понятно, что данные POST запроса можно увидеть, воспользовавшись сетевым анализатором.