http://[host]:[port][request-path]?[query-string]
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
Функциональность, предоставляемая сервлетом, реализована в методе service
в GenericServlet
, в методах do`Method` (где Method может принимать значение Get
, Delete
, Options
, Post
, Put
или Trace
) из объекта HttpServlet
или в любых других специфичных для протокола методах, определённых классом, который реализует интерфейс Servlet
. Термин "сервисный метод" используется для любого метода в классе сервлета, который предоставляет сервисы клиенту.
Общий шаблон для сервисного метода состоит в том, чтобы извлечь информацию из запроса, получить доступ к внешним ресурсам, а затем заполнить ответ на основе этой информации. Для HTTP-сервлетов корректная процедура заполнения ответа заключается в следующем:
Получить выходной поток из ответа.
Заполните заголовки ответа.
Запишите содержимое в выходной поток.
Заголовки ответа всегда должны быть установлены до того, как ответ будет зафиксирован. Веб-контейнер будет игнорировать любые попытки установить или добавить заголовки после фиксации ответа. В следующих двух разделах описывается, как получать информацию из запросов и генерировать ответы.
Запрос содержит данные, передаваемые между клиентом и сервлетом. Все запросы реализуют интерфейс ServletRequest
. Этот интерфейс определяет методы для доступа к следующей информации:
Параметры, которые обычно используются для передачи информации между клиентами и сервлетами
Атрибуты со значениями-объектами, которые обычно используются для передачи информации между веб-контейнером и сервлетом или между взаимодействующими сервлетами.
Информация о протоколе, используемом для передачи запроса, а также о клиенте и сервере, участвующих в запросе.
Информация, относящаяся к локализации
Вы также можете извлечь входной поток из запроса и вручную проанализировать данные. Чтобы прочитать символьные данные, используйте объект BufferedReader
, возвращаемый методом запроса getReader
. Чтобы прочитать бинарные данные, используйте ServletInputStream
, возвращаемый getInputStream
.
HTTP-сервлетам передаётся объект HTTP-запроса, HttpServletRequest
, который содержит URL запроса, HTTP-заголовки, строку запроса и т. д. URL HTTP-запроса содержит следующие части:
http://[host]:[port][request-path]?[query-string]
Путь запроса (request path) дополнительно состоит из следующих элементов.
Контекстный путь (Context path): конкатенация косой черты (/
) с корневым контекстом веб-приложения сервлета.
Путь сервлета (Servlet path): часть пути, соответствующей псевдониму компонента, который активировал этот запрос. Этот путь начинается с косой черты (/
).
Информация о пути (Path info): часть пути запроса, которая не является частью контекстного пути или пути сервлета.
Вы можете использовать методы getContextPath
, getServletPath
и getPathInfo
интерфейса HttpServletRequest
для получения этой информации. За исключением различий в кодировке URL между URI запроса и частями пути, URI запроса всегда состоит из контексного пути плюс путь сервлета и информация о пути.
Строки запроса состоят из набора параметров и их значений. Отдельные параметры извлекаются из запроса с использованием метода getParameter
. Есть два способа генерации строк запроса.
Строка запроса может явно отображаться на веб-странице.
Строка запроса добавляется к URL при отправке формы с HTTP-методом GET
.
Ответ содержит данные, передаваемые между сервером и клиентом. Все ответы реализуют интерфейс ServletResponse
. Этот интерфейс определяет методы, которые позволяют:
Получить выходной поток, чтобы использовать его для отправки данных клиенту. Чтобы отправить символьные данные, используйте PrintWriter
, возвращаемый методом ответа getWriter
. Чтобы отправить бинарные данные в ответе MIME, используйте ServletOutputStream
, возвращаемый getOutputStream
. Чтобы сочетать бинарные и текстовые данные, как в многочастном (multipart) ответе, используйте ServletOutputStream
и управляйте разделами символов вручную.
Укажите тип содержимого (например, text/html
), возвращаемый ответом с помощью метода setContentType(String)
. Этот метод должен быть вызван до фиксации ответа. Реестр типов MIME (content type) доступен по ссылке http://www.iana.org/assignments/media-types/
.
Укажите, нужно ли буферизовать вывод с помощью метода setBufferSize(int)
. По умолчанию любой контент, записанный в выходной поток, немедленно отправляется клиенту. Буферизация позволяет записывать содержимое до того, как что-либо отправлено обратно клиенту, что даёт сервлету больше времени для установки соответствующих кодов состояния и заголовков или переадресации на другой веб-ресурс. Метод должен быть вызван до того, как будет написано какое-либо содержимое, или до того, как ответ будет зафиксирован.
Установите информацию о локализации, такую как локаль и кодировка символов. Подробности смотрите в главе 22 «Интернационализация и локализация веб-приложений».
Объекты HTTP-ответа, javax.servlet.http.HttpServletResponse
, имеют поля, представляющие заголовки HTTP, такие как следующие.
Коды состояния, которые используются для указания причины, по которой запрос не удовлетворён или что запрос был перенаправлен.
Файлы cookie, которые используются для хранения информации о приложении на клиенте. Иногда файлы cookie используются для поддержания идентификатора для отслеживания сессии пользователя (см. Отслеживание сессии).
Назад | Вперёд | Содержание |