【问题标题】:Error Page - how to print stack trace in JSP错误页面 - 如何在 JSP 中打印堆栈跟踪
【发布时间】:2025-12-27 12:15:11
【问题描述】:

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

${exception.printStackTrace()}

但我不知道怎么做。有什么办法可以做到吗?:-)

感谢您的建议,

马特奥

【问题讨论】:

  • 找不到方法名的API? download.oracle.com/javase/1.4.2/docs/api/java/lang/…。问题应始终列出您遇到的错误类型。即使是,该行也不会输出任何内容
  • @Juan 我相信@mateo 意味着他找不到将 printStackTrace() 放入页面内容的方法,如果没有内联代码 (eew) 来围绕StringWriter.

标签: spring exception


【解决方案1】:

我能想到的最简单的解决方案是循环堆栈跟踪元素,利用 Throwable.getStackTrace() 方法:

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

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

【讨论】:

  • +1。但是不应该真正在 JSP 中打印堆栈跟踪。用户喜欢堆栈跟踪;)
  • @Bozho:是的。我认为这是出于诊断目的,但为此我只使用 Tomcat 的默认错误页面。嘿嘿。
  • 是的,我完全将它用于诊断目的,我无权访问 Tomcat 日志,并且我已经自定义了此页面。所以我认为这比再次使用Tomcat默认错误页面更容易:-)但无论如何,谢谢...
  • @Bozho,在开发、测试和本地环境的自定义构建页面中打印堆栈跟踪非常棒。在我们的项目中,我们为每个部署环境提供了 Maven 配置文件,因此我们设置了一个属性,如果您希望显示堆栈跟踪,我们将提供一个布尔参数。因为 prod 是假的,因为其他一切都是真的。这为开发人员提供了获取异常的简单方法 - 他们不必查看日志文件......干杯!
【解决方案2】:

过去必须在页面中执行此操作(仅限开发/本地环境),并且只想在文本区域或预格式化块中显示它。 skaffman 的输出会打印出每个 strack 跟踪元素,但不会打印出消息和异常类。

如果您希望根据 printStackTrace() 对其进行预格式化,请考虑使用 Spring EL 和 commons-lang3。

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

【讨论】:

  • 根据 printStackTrace 打印的另一个优点是它也输出堆栈