inq*_*One 6 java servlets servletexception servlet-3.0 jakarta-ee
javax.servlet.AsyncContext 接口的javadoc说:
如果异步操作超时,容器必须运行以下步骤:
- 在他们的
onTimeout方法中调用所有AsyncListener注册ServletRequest到异步
操作的实例。- 如果没有调用
complete()任何侦听器或任何dispatch()方法,则执行状态代码等于 的错误调度HttpServletResponse.SC_INTERNAL_SERVER_ERROR。- 如果没有找到匹配的错误页面,或者错误页面没有调用
complete()或任何dispatch()方法,调用complete().
但是我在任何地方都找不到“错误调度”的含义。事实上,有一个Apache 错误也发出了同样的声音。(用他们的原话来说:“我也没有看到‘错误调度’的定义”)
但是当然,必须对此有明确的定义以及如何使用它。有人知道吗?
容器在异常/错误期间发出的调度称为错误调度。这些通常是调度到错误页面。据我所知,没有办法直接进行错误调度。
通过错误调度的请求会将调度程序类型设置为 DispatcherType.ERROR。(在servlet的service方法代码中,可以使用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"
Run Code Online (Sandbox Code Playgroud)
因此,如果您有一个容器将错误重定向到的错误页面,您知道可以阅读这六个属性以获取更多信息。
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>
Run Code Online (Sandbox Code Playgroud)
错误.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>
Run Code Online (Sandbox Code Playgroud)
在上面的示例应用程序中,如果没有找到客户端请求的页面,或者您在某处使用 response.sendError("404", "..."),容器将向 error.jsp 执行错误分派。
JSP 错误处理机制(使用“errorPage”和“isErrorPage”页面指令)也适用于此。
| 归档时间: |
|
| 查看次数: |
6148 次 |
| 最近记录: |