Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Unchecked Exception не перехватывается страницей ошибок Web.xml

Автор вопроса: obergerОтветов: 1

У меня есть непроверенное исключение, которое не обрабатывается указанной страницей ошибки web.xml. Моя настройка каталога выглядит следующим образом:

/index.jsp

/error.jsp

/WEB-INF/web.xml

/другие страницы и каталоги здесь

У меня есть следующее, указанное в web.xml:

    <error-page>
        <exception-type>java.lang.Throwable</exception-type>
        <location>/error.jsp</location>
    </error-page>

    <error-page>
        <error-code>500</error-code>
        <location>/error.jsp</location>
    </error-page>

Однако, когда я целенаправленно выбрасываю исключение IllegalArgumentException в своем сервлете входа через создание плохого объекта, приложение просто съедает ошибку и регистрирует ее в журнале Tomcat 6.0. Страница не перенаправляется на страницу error.jsp.

Что я делаю неправильно? Если вам нужна дополнительная информация, пожалуйста, дайте мне знать. Ниже приведена информация об ошибке из журнала Tomcat 6.0:

СЕРЬЕЗНЫЙ: Servlet.service() для сервлета. com.blank.accounts.servs.AccountSignInServlet.processRequest(AccountSignInServlet.java:107) в com.blank.accounts.servs.AccountSignInServlet.doPost(AccountSignInServlet.java:164) в javax.servlet.http.HttpServlet.service(HttpServlet. java:637) в javax.servlet.http.HttpServlet.service(HttpServlet.java:717) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) в org.apache.catalina.core.ApplicationFilterChain .doFilter(ApplicationFilterChain.java:206) в com.blank.filters.SessionAuthFilter.doFilter(SessionAuthFilter.java:79) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) в com.blank.filters.IPControlFilter.doFilter(IPControlFilter.java:97) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain .java:235) в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) в org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) в org.apache.catalina. core.StandardContextValve.invoke(StandardContextValve.java:191) в org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433) в org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) на org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) на org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) на ch.qos.logback.ac cess.tomcat.LogbackValve.invoke(LogbackValve.java:158) в org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) в org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java: 859) в org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574) в org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527) в java.lang .Thread.run(Thread.java:595)

Спасибо.

  • вы пробовали java.lang.Exception вместо этого? Bozho 11.07.2011
  • Да, я пробовал java.lang.Exception, а также javax.servlet.ServletException. Я пробовал все их по отдельности, а также в сочетании, но ошибка по-прежнему не всплывает на страницу ошибки, определенную в web.xml. oberger 11.07.2011

javaservletsservlet-filters

Ответы

Ответ 1 · рейтинг 3 · kschneid

Кажется, я припоминаю, что механизм страницы ошибок отключается во время вызова метода doFilter фильтра. Вы можете рассмотреть возможность использования самого внешнего фильтра в качестве собственного обработчика страницы ошибок.

Дополнительная информация на основе комментария:
Механизм страницы ошибок отключен для запроса, поскольку он обрабатывается одним или несколькими фильтрами (например, IPControlFilter и SessionAuthFilter). Это не имеет ничего общего с применением фильтра к странице с ошибкой. "Самый внешний фильтр", о котором я упоминал, будет сопоставлен с /* и будет просто делать что-то вроде:

try {
    chain.doFilter(request, response);
} catch (Throwable exc) {
    // set request attributes to capture error info and then forward to error page (e.g. /error.jsp)
}

Другими словами, этот фильтр, по сути, воссоздает механизм страницы ошибок...

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы