如果由servletcontainer捕捉到的异常是
ServletException和
<error-page>声明捕捉异常 其他
比
ServletException,那么它的原因实际上是打开并作为存储
"javax.servlet.error.exception"。因此,您基本上已经将其作为
throwable变量,并且不需要调用
getCause()它。
另请参阅Servlet
2.5规范第9.9.2章的第5段:
如果没有使用类层次结构匹配的
error-page包含声明的声明exception-type,并且抛出的异常是其ServletException子类或子类,
则容器将提取ServletException.getRootCause方法定义 的包装后的异常
。对错误页面声明进行第二遍处理,再次尝试与错误页面声明进行匹配,但改用包装的异常。
顺便说一句,最好使用
RequestDispatcher#ERROR_EXCEPTION常量而不是对其进行硬编码。
Throwable throwable = (Throwable) request.getAttribute(RequestDispatcher.ERROR_EXCEPTION);



