Как получить необработанные исключения в веб-приложении сервлета Java - PullRequest
14 голосов
/ 14 сентября 2011

Существует ли стандартный способ отлова необработанных исключений, которые происходят внутри контейнера сервлетов Java, таких как tomcat или Jetty? Мы запускаем много сервлетов, которые приходят из библиотек, поэтому мы не можем легко вставить наш код try / catch. Также было бы неплохо как можно более универсальным образом перехватить и записать все необработанные исключения в нашем веб-приложении (которое работает в Jetty) на наш баг-трекер через предоставленный API.

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

Ответы [ 3 ]

13 голосов
/ 14 сентября 2011

Я думаю, что пользовательский фильтр действительно работает лучше.

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    try {
        chain.doFilter(request, response);
    } catch (Throwable e) {
        doCustomErrorLogging(e);
        if (e instanceof IOException) {
            throw (IOException) e;
        } else if (e instanceof ServletException) {
            throw (ServletException) e;
        } else if (e instanceof RuntimeException) {
            throw (RuntimeException) e;
        } else {
            //This should never be hit
            throw new RuntimeException("Unexpected Exception", e);
        }
    }
}
11 голосов
/ 14 сентября 2011

В web.xml (дескриптор развертывания) вы можете использовать элемент <error-page> для указания страниц ошибок по типу исключения или Код состояния ответа HTTP . Например:

<error-page>
    <error-code>404</error-code>
    <location>/error/404.html</location>
</error-page>
<error-page>
    <exception-type>com.example.PebkacException</exception-type>
    <location>/error/UserError.html</location>
</error-page>

Для описания, ориентированного на NetBeans, mosey on to Настройка веб-приложений: отображение ошибок на экраны ошибок (Учебное пособие по Java EE 6) (или см. Версия учебного пособия по Java EE 5 ).

3 голосов
/ 14 сентября 2011

Не уверен на 100%, будет ли это работать с контейнером сервлетов, или как далеко должен идти этот вызов, но вы можете вызвать метод static setDefaultUncaughtExceptionHandler для Thread установить обработчик, который будет обрабатывать все необработанные исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...