2011-05-25 7 views
3

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

редактировать

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

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

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

+0

Покажите нам фрагмент 'web.xml'. –

ответ

2

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

Чтобы предотвратить это, вам необходимо убедиться, что вы начинаете писать ответ только тогда, когда все бизнес-код завершил свою работу (лучше, просто не делайте этого в сервлете, а просто переходите на JSP) а также то, что ваши JSPs не содержат любую одну строку бизнес-кода (часто представленную 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> 

то риск велик, что вы получите пустой стр.

+0

но как поймать ошибки в jsp таким образом? – maks

+0

Выполнение бизнес-задания в сервлете вместо JSP. JSP следует использовать только для презентации. См. Также http://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files – BalusC

+0

У меня нет бизнес-логики в jsp. Jsp содержит только отформатированный вывод объекта, который имеет доступ к такой базе данных: где Obj - это класс, который имеет метод getInfo, который обращается к базе данных. – maks

Смежные вопросы