Это зависит от того, как/где вы их ловите. Обычно вы хотите указать <error-page>
в web.xml
для этого следующим образом:
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.html</location>
</error-page>
Это в основном показывает страницу error.html
для любого e instanceof java.lang.Exception
.
Другой способ — поймать его в Filter
прослушивании url-pattern
из /*
:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
try {
chain.doFilter(request, response);
} catch (Exception e) {
request.setAttribute("exception", e);
request.getRequestDispatcher("/error.html").forward(request, response);
}
}
Это в основном то же самое, у вас только немного больше свободы в управлении ответом и других вещах, таких как ведение журнала.
В любом случае произойдет сбой всякий раз, когда ответ уже зафиксирован (т. е. заголовки уже отправлены на сторону клиента). Затем вы должны были заметить IllegalStateException: response already committed
в журналах сервера, и клиент увидит недоделанную (или даже пустую) страницу. Это точка невозврата. Вы хотите выполнить любую бизнес-логику до отображения ответа. Это также одна из причин, по которой считается плохой практикой выполнять бизнес-логику на стороне представления (JSP/Facelets).
person
BalusC
schedule
08.06.2010