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容器不会覆盖,可以找回丢失的异常
本文探讨了Struts2框架中struts2Dispatcher.sendError方法的实现细节,尤其是在遇到500错误时如何处理异常信息,并揭示了如何通过兼容属性获取原始异常。
1万+

被折叠的 条评论
为什么被折叠?



