2010-12-14 98 views
8

我使用spring SimpleMappingExceptionResolver在我的Spring应用程序中创建了异常处理。一切正常。现在我需要以某种方式在jsp页面中打印捕获到的异常。像消息和堆栈跟踪。在我的jsp中,我在“exception”属性中找到了异常对象。我需要做的就是这样的:错误页面 - 如何在JSP中打印堆栈跟踪

${exception.printStackTrace()} 

但我不知道如何。有什么办法如何做到这一点?:-)

感谢您的任何建议,

+1

您无法找到方法名称的API? http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Throwable.html#printStackTrace()。问题应该总是列出你得到的错误。即使是这样,该行也不会输出任何内容 – 2010-12-14 18:00:23

+0

@Juan我相信@mateo意味着他无法找到将printStackTrace()插入到页面内容中的方法,如果没有内联代码(eew)来设置它是很难复制的在StringWriter周围打印PrintWriter。 – 2011-03-30 17:52:41

回答

17

我能想到的最简单的办法是遍历所有的堆栈跟踪元素,以优势Throwable.getStackTrace()方法:

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

当然,您需要添加一些格式。

+1

+1。但是不应该在JSP中打印堆栈跟踪。用户喜欢stacktraces;) – Bozho 2010-12-14 18:01:23

+0

@Bozho:是的。我认为这是出于诊断目的,但为此我只使用Tomcat的默认错误页面。嘿,嘿。 – skaffman 2010-12-14 18:02:30

+1

是的,我完全用于诊断目的,我没有访问Tomcat日志,并且我已经定制了此页面。所以我认为这会比再次使用Tomcat默认错误页面更容易:-)但无论如何,谢谢... – mateo 2010-12-14 18:05:26

2

必须在过去的页面中执行此操作(仅用于开发/本地环境),并且只想将其显示在textarea或预格式化的块中。 skaffman的输出打印出每个痕迹元素,但不包含消息和异常类。

如果您希望按照printStackTrace()预先格式化,请考虑使用Spring EL和commons-lang3。

<spring:eval expression="T(org.apache.commons.lang3.exception.ExceptionUtils).getStackTrace(exception)"/>