Лекции 2025. Java. Белая / Ответы на билеты. Java
.pdf
2. Использование фильтров для перехвата исключений: |
|
Фильтр может обернуть вызов |
в блок |
. Если сервлет (или другой фильтр ниже по цепочке) выбросит исключение, этот фильтр сможет его поймать.
После перехвата фильтр может:
Залогировать ошибку.
Перенаправить пользователя на кастомную страницу ошибки.
Модифицировать ответ.
Обернуть исключение в другое и пробросить дальше (хотя обычно на этом уровне его уже обрабатывают для пользователя).
3. Механизмы обработки ошибок во фреймворках (например, Spring MVC):
Современные веб-фреймворки обычно предоставляют свои, более удобные и мощные механизмы для централизованной обработки исключений (например,
и
в Spring MVC). Они часто строятся поверх стандартных механизмов Servlet API, но скрывают детали.
Что не сработает:
Прямой
вокруг вызова другого сервлета: Если сервлет A вызывает сервлет B через
или
, то если сервлет B выбросит непроверяемое (runtime) исключение, оно будет проброшено через
или
и может быть поймано в
сервлета A. Однако, если сервлет B выбрасывает проверяемое (checked) исключение, он должен его либо обработать, либо объявить в
. Методы
и
сами объявляют
и
. Поэтому, если сервлет B выбросит проверяемое исключение, несовместимое с этими двумя, оно будет обернуто контейнером в
.
Обмен исключениями через
или сессию: Это плохая практика и не является стандартным способом обработки ошибок между сервлетами.
Рекомендации:
Используйте декларативную обработку ошибок (
) для отображения пользовательских страниц ошибок. Это стандартный и надежный способ.
Используйте фильтры для централизованного логирования ошибок и,
возможно, для более сложной логики обработки, если это необходимо до того, как контейнер задействует механизм
.
Проектируйте ваши сервлеты так, чтобы они обрабатывали ожидаемые исключения (например,
при работе с файлами,
при работе с БД) внутри себя, если это возможно, или выбрасывали специфичные для приложения исключения, которые затем можно будет настроить для обработки через
.
Непроверяемые исключения (runtime exceptions), вызванные ошибками программирования (
,
), обычно сигнализируют о багах, которые нужно исправлять в коде. Механизм
для кода 500 поможет их "красиво" скрыть от пользователя, но основное — это исправление бага.
Выбор способа зависит от того, какую степень контроля и какую логику обработки вы хотите реализовать. Декларативный подход с
— это основа.
100. Что представляет собой ServletConfig?
— это интерфейс в Java Servlet API, объект которого создается контейнером сервлетов для передачи конфигурационной информации
конкретному экземпляру сервлета во время его инициализации.
Каждый сервлет в веб-приложении имеет свой собственный уникальный объект
.
Основные функции и информация, предоставляемая
:
1. Параметры инициализации сервлета (Initialization Parameters):
Позволяет получить доступ к параметрам инициализации, которые были заданы для данного сервлета в дескрипторе развертывания (
с помощью
) или в аннотации
(с помощью
).
Метод:
— возвращает значение параметра по его имени или
, если параметр с таким именем не найден. Метод:
— возвращает перечисление всех имен параметров инициализации для данного сервлета. Эти параметры специфичны для конкретного сервлета и не видны другим сервлетам.
2. Доступ к |
: |
|
|
предоставляет способ получить доступ к объекту |
|
|
, который представляет контекст всего веб-приложения. |
|
Метод: |
— возвращает |
, к |
которому принадлежит данный сервлет. |
|
|
Через |
сервлет может взаимодействовать с контейнером, |
|
получать доступ к ресурсам приложения, параметрам контекста (глобальным |
|
|
для приложения), обмениваться атрибутами с другими компонентами |
|
|
приложения. |
|
|
3. Имя сервлета:
Позволяет получить логическое имя сервлета, как оно определено в дескрипторе развертывания (
) или аннотации
(
).
Метод:
.
Как сервлет получает объект
?
Контейнер сервлетов передает объект
сервлету при вызове его метода
:
Если вы наследуете от
(или его подкласса
), то
уже реализует интерфейс
и предоставляет следующие удобные методы:
: Возвращает объект
, переданный в
.
: Делегирует вызов
.
: Делегирует вызов
.
: Делегирует вызов
.
: Делегирует вызов
.
Поэтому, если вы наследуете
, вам обычно не нужно напрямую хранить ссылку на
, переданную в
, вы можете просто вызывать
или напрямую
,
и т.д. в любом методе вашего сервлета (после того, как
был вызван).
Пример использования в
(после
):
В итоге,
— это мост между контейнером сервлетов и конкретным сервлетом, предоставляющий ему конфигурационную информацию, специфичную для этого сервлета, и доступ к общему контексту приложения. Он используется на этапе инициализации для настройки сервлета.
101. Что представляет собой ServletContext?
— это интерфейс в Java Servlet API, объект которого создается контейнером сервлетов для каждого веб-приложения при его развертывании.
предоставляет сервлетам и другим компонентам приложения (фильтрам, слушателям) доступ к информации о среде выполнения веб-приложения (контексте) и позволяет им взаимодействовать с контейнером.
Можно думать о
как о глобальном объекте для всего вебприложения. Существует один экземпляр
на одно веб-приложение
(на один WAR-файл или развернутый контекст).
Основные функции и информация, предоставляемая
:
1.Доступ к параметрам инициализации контекста (Context Initialization Parameters):
Метод:
: Возвращает имя и версию контейнера сервлетов/сервера.
Метод:
,
: Возвращают мажорную и минорную версии Servlet API, которые поддерживает контейнер.
Метод:
: Возвращает отображаемое имя приложения (из
в
).
Метод:
: Возвращает контекстный путь (context path) приложения (например,
в URL
).
6. Диспетчеризация запросов (Request Dispatching):
Позволяет передавать управление запросом другому ресурсу (сервлету, JSP, HTML-файлу) внутри того же веб-приложения.
Методы:
: Возвращает
для указанного пути. Путь должен начинаться с
.
: Возвращает
для сервлета с указанным именем.
Затем на объекте
можно вызвать 
или
.
7. Управление жизненным циклом (косвенно):
Сам
создается контейнером при старте приложения и уничтожается при его остановке. Компоненты приложения (например,
) могут реагировать на эти события.
Как получить |
? |
|
|
В сервлете: |
|
|
|
Через объект |
: |
|
(доступен |
в методе |
|
). |
|
Если сервлет наследует |
(или |
), можно просто |
|
вызвать |
|
в любом методе после инициализации. |
|
В фильтре:
Через объект
:
(доступен в методе
).
В слушателе:
Для
и
: через
.
Для
и других слушателей сессии/запроса: можно получить
из объекта
(
) или 
(
).
В JSP (встроенный объект):
Через неявный объект
(который является экземпляром
).
Пример использования:
В итоге,
— это центральный объект, представляющий вебприложение в контейнере сервлетов. Он предоставляет доступ к глобальной конфигурации, ресурсам, возможность логирования и обмена данными между компонентами приложения.
102. В чем отличия ServletContext и ServletConfig?
и
— это два важных интерфейса в Java Servlet API, но они служат разным целям и представляют разные уровни конфигурации и контекста в веб-приложении.
Характеристика |
( |
) |
|
( |
|
|
|||
|
|
|
|
|
Область |
Специфичен для одного конкретного |
|
Глобален для вс |
|
действия |
сервлета. Каждый сервлет имеет свой |
|
приложения. Сущ |
|
|
собственный |
. |
|
экземпляр на все |
|
|
|
|
приложение. |
|
|
|
|
|
Назначение |
Предоставляет конфигурационную |
|
Представляет кон |
|
|
информацию и доступ к |
|
для |
выполнения) все |
|
конкретного сервлета. |
|
|
приложения и пр |
|
|
|
|
доступ к его ресур |
|
|
|
|
глобальным настр |
|
|
|
|
|

с помощью элемента
.
— возвращает значение параметра по имени.
— возвращает имена всех параметров контекста.
предоставляет общее хранилище (в виде пар ключ-значение), где компоненты веб-приложения могут
: Сохраняет объект под указанным именем.
: Извлекает объект по имени.
: Удаляет атрибут.
: Возвращает имена всех атрибутов.
видны всем сервлетам, JSP и другим компонентам данного веб-приложения на протяжении всего времени его жизни.
.
: Возвращает
для чтения ресурса. Путь должен начинаться с
и быть относительно корня контекста.
: Возвращает URL ресурса.
: Возвращает реальный путь к файлу на сервере для указанного виртуального пути. (Использовать с осторожностью, так как приложение может быть развернуто не как распакованный каталог).
: Возвращает пути к ресурсам внутри указанного каталога.