当前位置: 首页 > 面试题库 >

Servlet处理中的“错误分配”是什么?

夏侯玄天
2023-03-14
问题内容

javax.servlet.AsyncContext接口的javadoc说:

如果异步操作已超时,则容器必须通过以下步骤运行:

  • 以其onTimeout方法调用在其上 启动了异步操作的所有AsyncListener注册实例。ServletRequest

  • 如果没有调用complete()
    任何侦听器或任何dispatch()方法,请使用状态代码等于的方式执行错误分配HttpServletResponse.SC_INTERNAL_SERVER_ERROR

  • 如果未找到匹配的错误页面,或者未调用错误页面 complete()或任何dispatch()方法,请调用complete()

但是我在任何地方都找不到“错误分发”的含义。实际上,有一个Apache
Bug令人惊叹。(用他们的确切话说:“我也没有看到’错误分配’的定义。”)

但是,当然,必须对此有一个明确的定义以及如何使用它。有人知道吗?


问题答案:

容器在异常/错误期间进行的调度称为错误调度。这些通常分派到错误页面。据我所知,没有办法直接进行错误分配。

通过错误分派发出的请求会将分派器类型设置为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文件中指定的自定义错误页面 但是为什么我总是在curl的输出中看到默认的400错误页面及其跟踪?我缺少处理的异常类型(我使用的是java.lang.exception)或其他? 这是servlet的代码: 这是 web.xml 配置文件:

  • 问题内容: 我一直在使用spring-webflux进行一些研究,我想了解使用路由器功能处理错误的正确方法。 我创建了一个小项目来测试几个场景,并且我希望获得有关它的反馈,并查看其他人在做什么。 到目前为止,我在做什么。 提供以下路由功能: 我已经在我的处理程序上执行了 它们是我的错误处理程序: 这是完整的示例存储库: https://github.com/LearningByExample/re

  • 因此,我有一个Javascript脚本,它在一个循环中将小的分数相加,它有可能将0.2加到0.1。然后,这个值被输入到另一个函数,但问题是,我需要0.3来精确输入,而不是0.3000000000000004。 什么是最简单的方法,以确保数字是正确和准确的。注意,它可能得到0.25+0.125等,被添加到简单的四舍五入到小数点1不会解决问题。 也有可能添加0.2+0.1000000000000000

  • 我的JSP脚本中有这段代码 我的错误。jsp脚本是: 比如:http://www.tutorialspoint.com/jsp/jsp_exception_handling.htm 但我想替换servlet之前的所有代码。。。 正如你所见。。。 我需要翻译 error.jsp完全...例如如何翻译这个: 对不起,但是我不知道怎么做... PD:我在寻找我的问题,但网站告诉我需要改变网站。xml文件

  • 问题内容: 有人可以解释什么是每个请求线程和每个连接线程吗?servlet使用哪种模型?如何分配线程来处理HTTP请求?是线程/请求还是连接? 假设我要在自己的方法中异步执行耗时的任务,那么我将使用Java执行程序启动一个新线程,以便在单独的线程中进行冗长的计算并立即发送响应。 现在,这是否可以确保我释放了正在处理我的线程,或者由于子线程仍在运行而仍在使用它? 问题答案: 每个请求意味着在发出HT

  • 让我首先说这是工作昨天,所以我完全不明白为什么它停止工作所有突然。而Java/插件真的不是我的专长。 我正在开发一个应用程序,它可以对另一个域上的服务器进行POST和GET调用。这是一个Maven项目。为了避免跨源问题,我有一个HttpProxy.ProxyServlet插件。 我将在这里列出所有的工作peics,但基本上问题和错误都在这篇文章的底部总结出来。 pom.xml web.xml 第二