Это зависит от того, как / где вы их ловите. Обычно вы хотите указать <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) считается плохой практикой.