2016-04-13 9 views
1

Я внедрил ServletContextListener в веб-приложении Java Servlet через аннотацию @WebListener. В моем методе contextInitialized я выполняю некоторую настройку и проверяю, доступны ли ожидаемые ресурсы.Остановить запуск веб-приложения из `ServletContextListener` метода` contextInitialized`

Если я определяю в этом методе contextInitialized что-то не так, как остановить веб-приложение от продолжения с выполнением сервлетов? Эти сервлеты не должны выполняться, если среда не подходит (например, недоступна база данных).

Как грациозно обрабатывать неисправную среду для веб-приложения на основе сервлетов?

+0

Вы пытались выбросить исключение? –

ответ

2

Нет, похоже, что интерфейс ServletContextListener был не, предназначенный для предотвращения запуска веб-приложения.

Как this Answer состояния, сервлетов спецификации говорит ServletContextListenerможет каким-то образом отключить доступ к веб-приложению, когда исключение встречается. Это слово may означает необязательный, не требуется. Кроме того, спецификация точно определяет, что означает остановка доступа к веб-приложению.

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

Мой опыт работы с Tomcat 8.0.33 ... Ввод throw new RuntimeException ("bogus stop servlet "); в методе contextInitialized предотвращает развертывание приложения. Консоль во время развертывания в отчетах IDE сообщает «FAIL - развернутое приложение в контексте контекста/но контекст не запускался». К сожалению, ни эта консоль, ни ни одна из журналов не записывают отчет о фактическом исключении. Поэтому, если вы выбросите несколько исключений из одного или нескольких слушателей, отладка не будет очевидна.

Как упоминалось в другом месте в переполнении стека, наиболее надежным решением, вероятно, является то, что ваш ServletContextListener отмечает успех или неудачу с переменной флагов, хранящейся в сеансе сервлета. Затем получите код сервлета и проверьте этот флаг. Тогда ваш код сервлета определит соответствующий курс действий. Ваше веб-приложение будет развернуто, но ваш собственный сервлет (ы) может выбрать ничего не делать и отправить код ошибки HTTP.

Похожие вопросы:

Примечание: при добавлении или редактировании ServletContextListener вам может потребоваться выполнить операцию «очистить и построить» в вашем проекте. Функция «горячей» замены или развертывания во время разработки вашей среды разработки не может воспринимать новый или измененный прослушиватель. Отслеживайте свой код или выполняйте некоторые протоколирования для проверки.

 Смежные вопросы

  • Нет связанных вопросов^_^