容器在异常/错误期间进行的调度称为错误调度。这些通常是分派到错误页面。据我所知,没有办法直接进行错误调度。
通过错误分派的请求将分派器类型设置为 DispatcherType.ERROR。(在servlet的服务方法代码中,可以使用getDispatcherType()获取dispatch类型)
以下六个请求范围的属性也将在错误调度中设置。
"javax.servlet.error.exception"
"javax.servlet.error.exception_type"
"javax.servlet.error.message"
"javax.servlet.error.request_uri"
"javax.servlet.error.servlet_name"
"javax.servlet.error.status_code"
因此,如果您有一个容器将错误重定向到的错误页面,您就知道可以阅读这六个属性以获取更多信息。
http://docs.oracle.com/javaee/6/api/javax/servlet/DispatcherType.html
http://docs.oracle.com/javaee/6/api/javax/servlet/RequestDispatcher.html
您可以使用部署描述符 (web.xml) 中的标记来设置错误调度。例如,如果您为 404 错误代码添加了错误页面标记,那么当出现页面未找到错误时,容器将分派到该页面。在该错误页面中,您可以使用 request.getAttribute("javax.servlet.error.message") 之类的代码来检索有关错误的详细信息。例子 ...
网页.xml:
<web-app>
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
</web-app>
错误.jsp:
<!DOCTYPE html>
<html>
<head>
<title>404 Error</title>
</head>
<body>
The page was not found. You requested <%= request.getAttribute("javax.servlet.error.message") %> but it was not found. Sorry.
</body>
</html>
在上面的示例应用程序中,如果未找到客户端请求的页面或您在某处使用 response.sendError("404", "..."),则容器将向 error.jsp 执行错误调度。
JSP 错误处理机制(使用“errorPage”和“isErrorPage”页面指令)也适用于此。