2010-12-14 3 views
8

Я создал обработку исключений в своем приложении Spring с помощью Spring SimpleMappingExceptionResolver. Все работает нормально. Теперь мне нужно как-то распечатать пойманное исключение на странице jsp. Что-то вроде трассировки сообщений и стека. В моем jsp я нашел объект исключения в атрибуте «exception». Все, что мне нужно сделать, это что-то вроде этого:Страница ошибки - как распечатать трассировку стека в JSP

${exception.printStackTrace()} 

Но я не знаю как. Есть ли способ, как сделать это? :-)

Спасибо за любые предложения,

Матео

+1

Вы не можете найти API для имени метода? http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Throwable.html#printStackTrace(). Вопросы всегда должны указывать, какую ошибку вы получаете. Даже если это так, эта строка ничего не выводит –

+0

@Juan Я считаю, что @mateo означает, что он не может найти способ печатиStackTrace() в содержимое страницы, что трудно точно воспроизвести без встроенного кода (eew), чтобы установить вверх PrintWriter вокруг StringWriter. –

ответ

17

Самое простое решение, я могу думать о том, чтобы петля над элементами стека трассировки, воспользовавшись из Throwable.getStackTrace() метод:

<c:forEach items="${exception.stackTrace}" var="element"> 
    <c:out value="${element}" /> 
</c:forEach> 

Вы должны были бы добавить некоторое форматирование, конечно.

+1

+1. Но в JSP не нужно печатать стоп-трассы. Пользователи любят stacktraces;) – Bozho

+0

@Bozho: Aye. Я предполагаю, что это для диагностических целей, но для этого я бы просто использовал страницу ошибки Tomcat по умолчанию. Хей-хо. – skaffman

+1

Да, я использую его точно для диагностических целей, у меня нет доступа к журналу Tomcat, и я настроил эту страницу еще. Поэтому я подумал, что это будет проще, чем снова использовать страницу с ошибкой по умолчанию Tomcat :-) Но в любом случае спасибо ... – mateo

2

Должно было сделать это (только dev/local environment) только на страницах в прошлом и просто хотеть отображать его в текстовом поле или в предварительно отформатированном блоке. Результат от скаффмана выводит каждый элемент трассировки strack, но не класс сообщений и исключений.

Если вы хотите, чтобы он был предварительно отформатирован в соответствии с printStackTrace(), используйте Spring EL и commons-lang3.

<spring:eval expression="T(org.apache.commons.lang3.exception.ExceptionUtils).getStackTrace(exception)"/> 
Смежные вопросы