在该javax.servlet.AsyncContext接口的javadoc说:
在这种异步操作已超时的情况下,容器必须通过这些步骤来运行:
- 调用,在他们的
onTimeout
方法,所有AsyncListener
实例与注册ServletRequest
上异步
操作启动。 - 如果没有听众称为
complete()
或任何的dispatch()
方法,执行与状态码等于一个错误调度HttpServletResponse.SC_INTERNAL_SERVER_ERROR
。 - 如果没有找到匹配的错误页面,或错误页面没有调用
complete()
或任何的dispatch()
方法调用complete()
但是我无法找到“错误派遣”任何地方的意思。 其实有一个Apache的错误是惊呼相同。 (在他们的原话:“我还没有看到高清‘错误调度’,太”。)
但当然,必须有一个清晰的定义,以及如何使用它。 有人知道吗?
期间异常/错误由容器制造急件被称为错误调度。 这些通常是调度错误页面。 有没有办法直接做了一个错误派遣,因为我知道这一点。
已经通过错误来发送一个请求将调度类型设置为DispatcherType.ERROR。 (在servlet的服务方法的代码,你可以使用getDispatcherType调度类型())
以下六个请求范围的属性也将在错误急件设置。
"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”)来检索有关错误的详细信息。 例如...
web.xml中:
<web-app>
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
</web-app>
error.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”页面指令)在这里也适用。
这是不直接相关的问题,但我已经看到了几乎所有的地方没有明确提及,包括上述答案的另一个信息是错误调度在技术上是 “重定向”,这是相当内部前进。 对于初学者,因为他们通常写在作为“容器不重定向到一个错误页面”这似乎令人困惑。 所以,你的容器看到任何它开始寻找到Web XML资源被发送的HTTP错误代码/未捕获的异常,看是否有定义的任何处理,如果存在,则适当地转发使用请求到该资源的时刻请求调度。 那么很明显都在上面的回答中提到的信息适用。
如果有人想要但是做一个重定向,他们可以在过滤器或servlet或从任何地方他们所拥有的响应对象这样做。