Лекции 2025. Java. Белая / Ответы на билеты. Java
.pdf
— это как "город" или "университет". Он один для всех жителей/ студентов. В нем есть общие ресурсы (библиотека, стадион), общие правила и объявления для всех.

— это как "личный кабинет" или "студенческий билет" для конкретного сервлета (жителя/студента). Он содержит информацию, специфичную только для этого сервлета (например, его имя, его личные настройки), а также "ключ" для доступа к общим ресурсам города/университета (
).
Кратко:
: Один на веб-приложение. Глобальный контекст, общие ресурсы, параметры приложения.
: Один на сервлет. Конфигурация конкретного сервлета, доступ к его параметрам инициализации, способ получить
.
Пример, показывающий разницу:
Предположим, у нас есть
(или эквивалентные аннотации):
— это интерфейс в Java Servlet API, который
определяет объект для формирования и отправки ответа клиенту в ответ на его запрос. Контейнер сервлетов создает объект, реализующий
(или его подтип
для HTTP-протокола), и передает его в метод
сервлета.
Основные цели и функции
:
1. Формирование тела ответа (Response Body):
Предоставляет механизмы для записи данных, которые будут составлять тело ответа, отправляемого клиенту.
Методы:
: Возвращает объект
, который используется для отправки символьных (текстовых) данных клиенту (например, HTML, XML, JSON, обычный текст). Перед использованием этого метода обычно нужно установить тип контента и кодировку символов.

:
Возвращает объект
, который используется для отправки бинарных данных клиенту (например, изображения, PDFфайлы, аудио/видео потоки).
Важно: Для одного ответа можно использовать только один из этих методов (
или
). Попытка вызвать оба приведет к
. Выбор зависит от типа данных, которые вы отправляете.
2. Установка метаданных ответа:
Позволяет сервлету устанавливать различную метаинформацию об ответе, которая будет включена в HTTP-заголовки (в случае
).
Методы:
: Устанавливает MIME-тип контента ответа (например,
,
,
). Это важно, чтобы клиент (браузер) знал, как интерпретировать полученные данные.
: Устанавливает кодировку символов для тела ответа (например,
). Рекомендуется устанавливать до вызова
. Часто
объединяет обе настройки.
или 
: Устанавливает длину тела ответа в байтах. Это может помочь клиенту и промежуточным прокси-серверам оптимизировать получение данных.
: Устанавливает предпочтительный размер буфера для тела ответа.
: Принудительно отправляет содержимое буфера клиенту.
: Возвращает
, если часть ответа (заголовки или тело) уже была отправлена клиенту. После того как ответ "скоммичен", нельзя изменять заголовки или вызывать некоторые методы (например,
).
: Очищает любые данные из буфера ответа, а также заголовки и код состояния. Может быть вызван, только если ответ еще не скоммичен.
: Очищает только содержимое буфера, не затрагивая заголовки и код состояния.
3. Управление локалью:
Метод:
: Устанавливает локаль ответа, что может влиять на кодировку символов или другие аспекты, если контейнер или клиент учитывают это.
Метод:
.
Подтип
:
Для HTTP-запросов контейнер передает сервлету объект, реализующий
, который расширяет
и добавляет методы, специфичные для HTTP-протокола:
Установка кода состояния HTTP:
(например,
,
,
)
Работа с HTTP-заголовками:
Работа с Cookies:
Перенаправление (Redirect):
Кодирование URL:
(для перезаписи URL, если cookies отключены, для отслеживания сессии)
Пример использования
:
В итоге,
(и его HTTP-специфичный подтип
) является ключевым объектом, который сервлет использует для конструирования и отправки ответа обратно клиенту. Он предоставляет методы для установки типа контента, кодировки, заголовков, кода состояния и, самое
главное, для записи самого тела ответа.
104. Для чего нужен интерфейс ServletRequest?
— это интерфейс в Java Servlet API, который
определяет объект, предоставляющий клиентскую информацию сервлету.
Контейнер сервлетов создает объект, реализующий
(или его подтип
для HTTP-протокола), для каждого входящего запроса и передает
его в метод
сервлета.
Основные цели и функции
:
1. Получение информации о запросе:
Предоставляет доступ к данным, отправленным клиентом, и к информации о самом запросе.
Методы:
: Возвращает значение параметра запроса по его имени. Параметры могут быть переданы в строке запроса URL (для GET) или в теле запроса (для POST, обычно с 
). Возвращает
, если параметр не найден.
: Возвращает массив строк, если параметр может иметь несколько значений (например, из нескольких чекбоксов с одинаковым именем).
: Возвращает перечисление всех имен параметров в запросе.
: Возвращает
, где ключи — это имена параметров, а значения — массивы строк их значений.
: Возвращает имя и версию протокола, используемого в запросе (например,
).
: Возвращает схему URL (например,
,
).
: Возвращает имя хоста сервера, получившего запрос.
: Возвращает номер порта, на котором сервер получил запрос.
: Возвращает IP-адрес клиента, отправившего запрос.
: Возвращает полное имя хоста клиента.
или
: Возвращает длину тела запроса в байтах, или -1, если длина неизвестна.
: Возвращает MIME-тип тела запроса (например,
,
,
).
: Возвращает имя кодировки символов, используемой в теле запроса.
: Устанавливает кодировку символов, которая будет использоваться для чтения параметров запроса. Должна вызываться до чтения параметров или тела запроса.
2. Чтение тела запроса (Request Body):
Предоставляет доступ к потокам для чтения бинарных или символьных данных из тела запроса.
Методы:
: Возвращает
для чтения бинарных данных из тела запроса.
: Возвращает
для чтения символьных данных из тела запроса, используя кодировку, указанную в
.
Важно: Тело запроса можно прочитать только один раз. Попытка вызвать
после
(или наоборот), или вызвать один из них несколько раз, приведет к
.
3. Управление атрибутами запроса (Request Attributes):
предоставляет хранилище (в виде пар ключ-значение), где компоненты веб-приложения (например, фильтры, сервлеты, JSP) могут
хранить и передавать объекты (атрибуты) в рамках одного цикла обработки запроса. Атрибуты запроса существуют только на время жизни одного запроса.
Методы:
: Устанавливает атрибут.
: Получает атрибут. : Удаляет атрибут.
: Возвращает имена всех атрибутов.
Это часто используется для передачи данных от сервлета к JSP при использовании паттерна MVC (например, 
).
4. Диспетчеризация запросов:
Метод:
: Возвращает
для передачи управления другому ресурсу (сервлету, JSP, HTML) внутри того же приложения.
5. Доступ к
:
Метод:
: Возвращает
для данного веб-приложения.
Подтип
:
Для HTTP-запросов контейнер передает сервлету объект, реализующий
, который расширяет
и добавляет методы, специфичные для HTTP-протокола:
Информация о HTTP-методе:
(например, "GET", "POST").
Информация о пути и URL:
(часть URL от имени хоста до строки запроса).
(полный URL запроса, без строки запроса).
(контекстный путь приложения).
(часть URL, которая сопоставлена с сервлетом).
(дополнительная информация о пути после пути сервлета).
(часть URL после
).
Работа с HTTP-заголовками:
(если заголовок может иметь несколько значений)
Работа с Cookies:
Работа с сессиями:
Информация о пользователе (для аутентификации):
Поддержка
(для загрузки файлов, с Servlet 3.0+):
Пример использования
:

:
:
через
, но каждый имеет свой уникальный параметр
через свой
.