В вашем слушателе перехватывайте любые исключения и используйте атрибуты контекста сервлета для хранения флагов или другой полезной информации об ошибке. Вероятно, вам также следует занести что-то в журнал, чтобы указать, что приложение не работает.
На данный момент ваши параметры могут быть продиктованы архитектурой вашего приложения. Если все запросы обрабатываются одним сервлетом контроллера / диспетчера, возможно, имеет смысл, чтобы его метод init
проверял атрибуты контекста и выдавал UnavailableException
. Просто имейте в виду, что исключение относится только к конкретному сервлету, который его генерирует. Это делает этот подход менее управляемым, если ваше приложение содержит много сервлетов или обеспечивает прямой доступ к другим ресурсам.
Другим вариантом может быть создание фильтра, который перехватывает каждый запрос, проверяет атрибуты контекста и затем генерирует исключение. Другие варианты, безусловно, возможны.