Предпочтительный способ обработки исключений Java в ServletContextListener - PullRequest
19 голосов
/ 27 октября 2010

Что вы, ребята, рекомендуете делать в течение жизненного цикла сервлета в ответ на исключение ...

Например,

public class Foo implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        try {
           // something nasty
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        try {
           // something nasty
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

Я не совсем уверен, что обработает исключение времени выполнения выше. Я работаю над идеей, что если здесь создаются исключения, то они достаточно серьезны, чтобы полностью сломать систему, чтобы исключение (100) * времени выполнения (необработанное) могло бы быть в порядке.

Наверное, я спрашиваю, что обрабатывает непроверенные исключения из прослушивателей контекста сервлета?

Ответы [ 4 ]

10 голосов
/ 27 октября 2010

Когда вы ловите исключение, вы можете рассмотреть возможность установки атрибута ServletContext, чтобы указать, что произошла ошибка.Таким образом, если контейнер не отключил приложение, вы можете Filter s и / или Servlet s проверить атрибут ServletContext и предпринять соответствующие действия, такие как отображение страницы с ошибкой.

6 голосов
/ 27 октября 2010

Кажется, что ServletContentListener не предназначен для того, чтобы иметь возможность осуществлять контроль над жизненным циклом (в противном случае было бы разрешено генерировать исключение ServletException).

Таким образом, я бы не стал полагаться на RuntimeException, чтобы сделать что-нибудь полезное.Глядя на некоторые другие потоки здесь , кажется, что он регистрируется и игнорируется на определенных серверах приложений.

Если критично, что приложение не запускается при сбое кода, вы должны переместить этокод в раздел инициализации сервлета.

0 голосов
/ 28 октября 2010

Мы можем исключение через object.printStackTrace ();или вызов исключения через out.print («Exception is» + ex);

0 голосов
/ 27 октября 2010

Хорошим тоном будет показывать какую-то страницу типа «Техническая ошибка, извините», а не показывать трассировку стека с сообщением об ошибке.Просто войдите и отправьте пользователя на страницу с ошибкой.

...