struts2 Dispatcher.sendError
会把异常放到两个属性里
// WW-1977: Only put errors in the request when code is a 500 error
if (code == HttpServletResponse.SC_INTERNAL_SERVER_ERROR) {
// send a http error response to use the servlet defined error handler
// make the exception availible to the web.xml defined error page
request.setAttribute("javax.servlet.error.exception", e);
// for compatibility
request.setAttribute("javax.servlet.jsp.jspException", e);
}
在设置完属性之后调用
// send the error response
response.sendError(code, e.getMessage());
这时,sendError出现IllegalStateException错误
request.setAttribute("javax.servlet.error.exception", e);
将会被覆盖变成了IllegalStateException,丢失了原有的异常信息
导致在500页面始终输出的是错误的异常信息
可以通过获得javax.servlet.jsp.jspException的异常,这个为了兼容老的servlet规范放入的
通常web容器不会覆盖,可以找回丢失的异常