2013-02-19 2 views
5

Существует возможность в веб-приложений на Java для обработки исключений путем определения ошибки-страницы в web.xml:Может ли страница ошибки JSP вызвать проблемы?

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

Я интересно, если есть потенциально может быть проблема с определением страницы ошибок JSP (в отличие от страница с ошибкой HTML). Потому что JSP работают на стороне сервера. Может ли быть сценарий, когда сервер «полумертлив», генерирует исключение, пытается перенаправить на страницу с ошибкой, но не может отобразить его из-за того, что он «полумертлив»?

Под «полумертвым» я имею в виду, что сервер находится в состоянии, когда некоторые вещи все еще работают, но другие вещи не работают. В частности, я имею в виду, что все, что контролирует перенаправление на страницу с ошибками, определенную в web.xml, все еще работает, но фактическая рендеринг JSP не работает по какой-либо причине (что-то генерирует исключение).

У меня на самом деле не было такой проблемы, но мне интересно, возможно ли это. Потому что тогда потенциальная страница ошибок HTML будет работать (поскольку она не имеет логики на стороне сервера), в то время как страница ошибки JSP не будет работать.

И если это так, то как я могу «вернуться» на страницу ошибок HTML, когда страница ошибки JSP выходит из строя? Я все еще хочу использовать страницу ошибок JSP для отображения данных об ошибках, возвращенных в ответ, но если это невозможно, я хочу показать страницу HTML.

Я надеюсь, что имеет смысл ....

+0

+1 очень хороший вопрос –

+0

Можете ли вы разработать «полумертвую» ситуацию? –

+0

@HardikMishra Я отредактировал вопрос, чтобы объяснить себя лучше. См. Второй абзац. – Malki

ответ

1

Я нашел решение:

  1. Определить ошибку 500 для перенаправления на сервлет (вместо страницы)
  2. Define также страницу 404 ошибки - сделать это простой HTML-страницы.
  3. В сервлет перенаправляется на страницу с ошибкой JSP 500.
  4. Вся логика в сервлете окружена блоком try-catch. Блок catch делает response.sendError(HttpServletResponse.SC_NOT_FOUND);, который перенаправляет на страницу с ошибкой 404, определенную в web.xml.
0

Я, конечно, можно предусмотреть сценарий, в котором ваш error.jsp требует некоторых функциональных возможностей от сервера, а сервер не удовлетворяет, что (например, вы потеряете соединение с БД , вывести ошибку, запускается error.jsp, но : требует подключения по протоколу db по какой-либо причине - возможно, регистрацию ошибки или предоставление контактной информации?).

По этой причине я бы оставил error.jsp относительно простым и независимым.

+0

Я согласен с тем, что он прост, но есть ли способ гарантировать, что в случае ошибки при рендеринге JSP приложение будет перенаправлено на более простую страницу ошибок HTML? – Malki