2013-09-17 2 views
4

У меня есть сервлет Java, который помечен как load-on-startup и реализовал init(). В рамках логики init() есть вызов validate(), который определяет, действительно ли все.Возможно ли сделать исключение сервлета Java, чтобы приложение не запускалось?

Моя проблема в том, что если validate() определяет, что все нехорошо, я хочу, чтобы приложение не запускалось как предупреждение, что что-то нужно исправлять. Я попытался бросить ServletException, и, пока эта информация, переданная по конвейеру, была на моей консоли, я все еще мог отправлять трафик в приложении, и он ответил.

Наконец, мои руки несколько связаны сроками. Мой сервлет расширяет базовый класс, который настраивает контент, который я пытаюсь проверить.

Если есть решение, мне нужно будет его запустить на Tomcat и WebLogic.

+3

Я не уверен, что это возможно через 'YourServlet # init', но вы можете остановить запуск приложения в [' ServletContextListener # contextInitialized'] (http://docs.oracle.com/javaee/7/api/javax /servlet/ServletContextListener.html#contextDestroyed%28javax.servlet.ServletContextEvent%29) –

ответ

3

Как указано выше, Луиджи Мендоса, правильное место для инициализации веб-приложений в ServletContextListener, вместо того, чтобы полагаться на метод init отдельного сервлета.

Контекст веб-приложения уничтожается (по крайней мере, в Tomcat 6), когда исключение (исключение во время выполнения) выбрано из контекста listenerInized.

Ваша лучшая ставка заключается в перемещении логики инициализации в ServletContextListener (вы можете определить несколько слушателей для каждого веб-приложения, и они выполняются в том порядке, в котором они зарегистрированы в web.xml). И держите в сервлет только логику обработки запроса.

+0

не то, что я хочу спуститься в гнездо огромных крыс, но не настолько эффективно конкурирует с выгодой от 'load-on-startup' вариант? –

+3

@MattFelzani Нагрузка на запуск не только для создания экземпляра сервлета. Он также действует как заказ, для которого сначала должен быть создан «сервлет». Это действительно для загрузки EAGER, так что сервлет готов обрабатывать запросы сразу. –

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

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