什么是小服务程序处理一个“错误派遣”?(What is an 'error dispatch

2019-09-01 15:41发布

在该javax.servlet.AsyncContext接口的javadoc说:

在这种异步操作已超时的情况下,容器必须通过这些步骤来运行:

  • 调用,在他们的onTimeout方法,所有AsyncListener实例与注册ServletRequest上异步
    操作启动。
  • 如果没有听众称为complete()或任何的dispatch()方法,执行与状态码等于一个错误调度HttpServletResponse.SC_INTERNAL_SERVER_ERROR
  • 如果没有找到匹配的错误页面,或错误页面没有调用complete()或任何的dispatch()方法调用complete()

但是我无法找到“错误派遣”任何地方的意思。 其实有一个Apache的错误是惊呼相同。 (在他们的原话:“我还没有看到高清‘错误调度’,太”。)

但当然,必须有一个清晰的定义,以及如何使用它。 有人知道吗?

Answer 1:

期间异常/错误由容器制造急件被称为错误调度。 这些通常是调度错误页面。 有没有办法直接做了一个错误派遣,因为我知道这一点。

已经通过错误来发送一个请求将调度类型设置为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”页面指令)在这里也适用。



Answer 2:

这是不直接相关的问题,但我已经看到了几乎所有的地方没有明确提及,包括上述答案的另一个信息是错误调度在技术上 “重定向”,这是相当内部前进。 对于初学者,因为他们通常写在作为“容器不重定向到一个错误页面”这似乎令人困惑。 所以,你的容器看到任何它开始寻找到Web XML资源被发送的HTTP错误代码/未捕获的异常,看是否有定义的任何处理,如果存在,则适当地转发使用请求到该资源的时刻请求调度。 那么很明显都在上面的回答中提到的信息适用。

如果有人想要但是做一个重定向,他们可以在过滤器或servlet或从任何地方他们所拥有的响应对象这样做。



文章来源: What is an 'error dispatch' in servlet processing?