Страница ошибки в web.xml - PullRequest
3 голосов
/ 25 мая 2011

У меня есть такая проблема: я установил страницу ошибки dafault в web.xml на тип java.lang.Exception, поэтому он должен отображаться на всех исключениях в сервлетах и ​​jsp.Но когда я хочу проверить эту страницу (я отключаю соединение), она не отображается в браузере.в тестируемом сервлете я использую базу данных, поэтому, если соединение отсутствует, оно выдаст исключение.В сервлете я ловлю это исключение и throw new ServletException().также в блоке catch я сначала регистрирую сообщение, а затем выкидываю исключение.Так почему мой кот не показывает эту страницу с ошибкой?Вместо этого он показывает пустую страницу и в выходных данных сервера я вижу эти сообщения об ошибках

edit

 <error-page>
        <exception-type>java.lang.Exception</exception-type>
        <location>/errorPages/InternalError.jsp</location>
    </error-page>

я сохраняю страницы ошибок в / errorPages и страницу, котораядолжен отображаться с именем InternalError.jsp

Эта страница должна отображаться после перехода на страницу jsp, которая использует El для отображения данных из базы данных, которая находится в том объекте jsp fall throw, который находится в сеансе

1 Ответ

2 голосов
/ 25 мая 2011

Вы получите пустую страницу в такой ситуации, когда ответ уже передан сервлетом или JSP, вызвавшим исключение.Другими словами, когда заголовки ответа HTTP уже отправлены веб-браузеру.Это точка нет возврата .

Чтобы предотвратить это, вам нужно убедиться, что вы начинаете писать в ответ только после того, как весь бизнес-код завершил свою работу (лучше, просто не делайте этого в сервлете, нопросто перейдите к JSP), а также, что ваши JSP не содержат какую-либо одну строку бизнес-кода (часто представленную scriptlets <% %>).

Так что еслинапример, вы делаете это в сервлете

response.getWriter().write("blah");
throw new ServletException("epic fail");

или когда исключение выдается «наполовину» JSP

<p>Some HTML</p>
<% throw new ServletException("epic fail"); %>
<p>Some more HTML</p>

, тогда велик риск, что вы получите пустую страницу.

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