如何在 JSP 页中打印错误堆栈跟踪?

2022-09-01 19:47:00

我已经在web中设置了我的错误页面.xml:

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

现在我想在JSP上打印错误的堆栈跟踪(当然仅在开发模式下)。如何在我的 JSP 页面上打印错误堆栈跟踪?我没有为此应用程序使用任何框架,因此只有默认的Servlet API可用于我的程序。


答案 1

从内部设置的请求中获取参数,并使用它来打印和处理其他信息,如 ,causemessage

<c:set var="exception" value="${requestScope['javax.servlet.error.exception']}"/>

并打印堆栈跟踪

<!-- Stack trace -->
<jsp:scriptlet>
  exception.printStackTrace(new java.io.PrintWriter(out));
</jsp:scriptlet>

另请参见


答案 2

当请求转发到错误页面时,容器将设置以下参数。

  • javax.servlet.error.status_code
  • javax.servlet.error.exception
  • javax.servlet.error.message
  • javax.servlet.error.request_uri
  • javax.servlet.error.servlet_name
  • javax.servlet.error.exception_type

在你的错误JSP中这样做,

<%request.getAttribute("javax.servlet.error.exception").printStackTrace(new java.io.PrintWriter(out))%>;

否则如果您的错误页被定义为带有 Page 指令的错误页,例如,

<%@ page isErrorPage="true" import="java.io.*"%>

异常脚本变量将在 JSP 中声明。您可以使用脚本小工具打印脚本变量,

exception.printStackTrace(new java.io.PrintWriter(out));

阿尔布

<jsp:scriptlet>
    exception.printStackTrace(response.getWriter())
</jsp:scriptlet>