2010-02-10 6 views
3

Я хотел бы направить все ошибки в свой Errorsevlet без явного указания всех кодов. Есть ли способ сделать это?множественная конфигурация кода ошибки web.xml

<error-page> 
    <error-code>400</error-code> 
    <location>/servlet/com.abc.servlet.ErrorServlet</location> 
</error-page> 

** И после достижения ErrorServlet, как я могу получить трассировку стека ошибки в сервлете. Чтобы я мог отправлять сообщения по электронной почте, когда возникает одна ошибка. **

ответ

0
<error-page> 
    <exception-type>java.lang.Throwable</exception-type> 
    <location>/servlet/com.ibm.eisa.servlet.ErrorServlet</location> 
</error-page> 

Попробуйте это, все ваши ошибки будут пойманы (500) в не 404 т.д.,

+0

Спасибо .. если я хочу, чтобы поймать всех 400-х, то, как конфигурация? Должен ли я писать отдельные записи страницы ошибок для всех? – coder247

+0

Да, вам нужно написать отдельные записи. –

+0

Есть ли способ получить трассировку стека из сервлета? для отправки почты с подробностями ... – coder247

2

Вам нужно будет указать все нужные коды в явном виде, механизм подстановки не поддерживается. Кодов не так много, вот полный list.

Чтобы распечатать трассировку стека (например, в комментарии, для отладки), вы могли бы сделать что-то вроде этого:

<%@ page isErrorPage="true" import="java.io.*"%> 
<body> 
<p>Sorry, there was an error.</p> 
<!-- The full stacktrace follows:--> 
<!-- 
<% 
if (exception != null) { 
    exception.printStackTrace(new PrintWriter(out)); 
} 
%> 
--> 
</body> 
10

Если вы можете обновить, так как Servlet 3.0 это возможно, чтобы иметь общую страницу ошибки для все ошибки, даже те, которые не вызваны исключением (например, 404, 401 и т. д.). Просто опустите <error-code> или <exception-type> в целом, так что у вас есть только <location>.

<error-page> 
    <location>/errorServlet</location> 
</error-page> 

Обратите внимание, что я заменил URL, чтобы избежать использования приложения Tomcat и встроенной осуждается InvokerServlet.

+0

Кажется, что эта «уникальная» страница ошибок не поддерживается даже последним Tomcat 7.0.27 ... BalusC, в какой версии у вас работает Tomcat? –

+0

Подтверждено, еще не поддерживается Tomcat (https://issues.apache.org/bugzilla/show_bug.cgi?id=52135). –

+0

Работа для Glassfish 4 – mboullouz

0

У меня была такая же забота, и после некоторых исследований я обнаружил, что, к сожалению, нет четкого требования поддерживать страницу ошибок по умолчанию в спецификациях Servlet 3.0.

Недопустимо, что «код ошибки» или «тип исключения» являются необязательными тегами в XSD, поэтому мы склонны считать, что страница с ошибкой по умолчанию будет без «кода ошибки» и без тега «исключение» ,

Некоторые серверы приложений (например, GlassFish) ведут себя по своему усмотрению, берут страницу с ошибкой по умолчанию, а затем следуя порядку конкретных страниц ошибок, они переопределяют страницу ошибок по умолчанию.

Я также тестировал это на WebLogic 12c, и я не мог заставить его работать как на GlassFish. Ниже в статье приводятся дополнительные сведения о Tomcat.

См: bz.apache.org/bugzilla/show_bug.cgi?id=52135

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