Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции 2025. Java. Белая / Ответы на билеты. Java

.pdf
Скачиваний:
4
Добавлен:
02.01.2026
Размер:
4.52 Mб
Скачать

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):

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

Метод: — возвращает значение параметра по имени.

Метод: — возвращает имена всех параметров контекста.

Эти параметры глобальны для всех сервлетов и JSP в приложении.

2. Управление атрибутами контекста (Context Attributes):

предоставляет общее хранилище (в виде пар ключ-значение), где компоненты веб-приложения могут совместно использовать объекты

(атрибуты).

Методы:

: Сохраняет объект под указанным именем.

: Извлекает объект по имени.

: Удаляет атрибут.

: Возвращает имена всех атрибутов.

Атрибуты видны всем сервлетам, JSP и другим компонентам данного веб-приложения на протяжении всего времени его жизни.

3. Доступ к ресурсам приложения:

Позволяет получать доступ к статическим ресурсам, находящимся в корне вебприложения или в каталоге .

Методы:

: Возвращает

для чтения ресурса. Путь должен начинаться с и быть относительно корня контекста.

: Возвращает URL ресурса.

: Возвращает реальный путь к файлу на сервере для указанного виртуального пути. (Использовать с осторожностью, так как приложение может быть развернуто не как распакованный каталог).

: Возвращает пути к ресурсам внутри указанного каталога.

4. Логирование (Logging):

Предоставляет простые методы для записи сообщений в лог-файл контейнера сервлетов.

Методы:

5. Получение информации о сервере и Servlet API:

Метод: : Возвращает имя и версию контейнера сервлетов/сервера.

Метод: , : Возвращают мажорную и минорную версии Servlet API, которые поддерживает контейнер.

Метод: : Возвращает отображаемое имя приложения (из в ).

Метод: : Возвращает контекстный путь (context path) приложения (например, в URL ).

6. Диспетчеризация запросов (Request Dispatching):

Позволяет передавать управление запросом другому ресурсу (сервлету, JSP, HTML-файлу) внутри того же веб-приложения.

Методы:

: Возвращает

для указанного пути. Путь должен начинаться с .

: Возвращает

для сервлета с указанным именем.

Затем на объекте можно вызвать

или .

7. Управление жизненным циклом (косвенно):

Сам создается контейнером при старте приложения и уничтожается при его остановке. Компоненты приложения (например,

) могут реагировать на эти события.

Как получить

?

 

 

В сервлете:

 

 

 

Через объект

:

 

(доступен

в методе

 

).

 

Если сервлет наследует

(или

), можно просто

вызвать

 

в любом методе после инициализации.

В фильтре:

Через объект : (доступен в методе ).

В слушателе:

Для и : через

.

Для и других слушателей сессии/запроса: можно получить из объекта () или

().

В JSP (встроенный объект):

Через неявный объект (который является экземпляром

).

Пример использования:

В итоге, — это центральный объект, представляющий вебприложение в контейнере сервлетов. Он предоставляет доступ к глобальной конфигурации, ресурсам, возможность логирования и обмена данными между компонентами приложения.

102. В чем отличия ServletContext и ServletConfig?

и — это два важных интерфейса в Java Servlet API, но они служат разным целям и представляют разные уровни конфигурации и контекста в веб-приложении.

Характеристика

(

)

 

(

 

 

 

 

 

 

Область

Специфичен для одного конкретного

 

Глобален для вс

действия

сервлета. Каждый сервлет имеет свой

 

приложения. Сущ

 

собственный

.

 

экземпляр на все

 

 

 

 

приложение.

 

 

 

 

Назначение

Предоставляет конфигурационную

 

Представляет кон

 

информацию и доступ к

 

для

выполнения) все

 

конкретного сервлета.

 

 

приложения и пр

 

 

 

 

доступ к его ресур

 

 

 

 

глобальным настр