我正在使用JBoss AS7。
我已经知道如何使用我自己的web.xml
错误页面来解决HTTP错误(例如404,500,...) - 这不是问题。
但出于调试原因,我需要查看错误StackTrace。如何访问默认显示的消息并将其嵌入错误页面?
答案 0 :(得分:2)
具体的异常实例可用作请求属性,其名称由RequestDispatcher#ERROR_EXCEPTION
键入,其值为javax.servlet.error.exception
。
因此,这将给你例外:
#{requestScope['javax.servlet.error.exception']}
但是,没有标准工具可以在视图中打印其堆栈跟踪。您需要homebrew an EL function,类似于JSF utility library OmniFaces已经具有#{of:printStackTrace()}
的风格。您可以在OmniFaces FullAjaxExceptionHandler
showcase page:
<ui:composition ... xmlns:of="http://omnifaces.org/functions">
...
<li>Stack trace: <pre><code>#{of:printStackTrace(requestScope['javax.servlet.error.exception'])}</code></pre></li>
其中函数实现如下所示:
/**
* Print the stack trace of the given exception.
* @param exception The exception to print the stack trace for.
* @return The printed stack trace.
*/
public static String printStackTrace(Throwable exception) {
if (exception == null) {
return null;
}
StringWriter stringWriter = new StringWriter();
exception.printStackTrace(new PrintWriter(stringWriter, true));
return stringWriter.toString();
}