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

错误处理程序Servlet:如何获取异常原因

魏毅
2023-03-14
问题内容

我在web.xml中配置了一个错误servlet:

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/ExceptionHandler</location>
</error-page>

对?

在我的(通常)servlet中:

doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        ...
        ...
    } catch (Exception e) {
        throw new ServletException("some mesage", e);
    }
}

因此,在这种情况下,“ e”将是根本原因。

在我的ExceptionHandler类中,我有:

doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception");
    throwable.getCause() //NULL
}

这就是问题。throwable.getCause()为null。


问题答案:

如果由servletcontainer捕捉到的异常是ServletException<error-page>声明捕捉异常 其他
ServletException,那么它的原因实际上是打开并作为存储"javax.servlet.error.exception"。因此,您基本上已经将其作为throwable变量,并且不需要调用getCause()它。

另请参阅Servlet
2.5规范
第9.9.2章的第5段:

如果没有使用类层次结构匹配的error-page包含声明的声明exception- type,并且抛出的异常是其ServletException子类或子类,
则容器将提取ServletException.getRootCause方法定义 的包装后的异常
。对错误页面声明进行第二遍处理,再次尝试与错误页面声明进行匹配,但改用包装的异常。

顺便说一句,最好使用RequestDispatcher#ERROR_EXCEPTION常量而不是对其进行硬编码。

Throwable throwable = (Throwable) request.getAttribute(RequestDispatcher.ERROR_EXCEPTION);


 类似资料:
  • 我有以下情况,我试图看看是否有解决方案: 两个Spring服务调用必须并行进行(一个是现有的服务调用/逻辑,另一个是新添加的服务调用) 然而,一条快乐的道路应该是直截了当的,当涉及到服务发出的错误时,应该遵守以下规则: > 如果其中只有一个失败,则通过另一个服务(异步)记录错误,并且API只返回成功服务的结果--这可以通过相应的线程来完成。 我的问题是,因为这些服务返回某个对象的列表,即使我使用并

  • 当一个 Servlet 抛出一个异常时,Web 容器在使用了 exception-type 元素的 web.xml 中搜索与抛出异常类型相匹配的配置。 您必须在 web.xml 中使用 error-page 元素来指定对特定异常 或 HTTP 状态码 作出相应的 Servlet 调用。 web.xml 配置 假设,有一个 ErrorHandler 的 Servlet 在任何已定义的异常或错误出现时

  • 问题内容: 有没有一种方法可以添加一个全局包罗万象的错误处理程序,可以在其中将响应更改为通用JSON响应? 我无法使用该信号,因为它不允许修改响应(http://flask.pocoo.org/docs/0.10/signals/)。 相反,所有信号处理程序均以未定义的顺序执行,并且不修改任何数据。 我宁愿不要包装该函数,因为感觉就像是内部API。我想我正在寻找类似的东西: 请注意,不会接受任何参

  • 通过使用浏览器,当抛出错误时,我被正确地重定向到web.xml文件中指定的自定义错误页面 但是为什么我总是在curl的输出中看到默认的400错误页面及其跟踪?我缺少处理的异常类型(我使用的是java.lang.exception)或其他? 这是servlet的代码: 这是 web.xml 配置文件:

  • 当程序出现错误或者异常时,我们一般会希望在开发时输出报错信息,在生产环境时隐藏详细的信息。 在 imi 中,提供了 Http 服务的错误异常默认处理器支持。 默认 Http 错误处理器:Imi\Server\Http\Error\JsonErrorHandler 指定默认处理器 配置文件中: return [ 'beans' => [ 'HttpErrorHan

  • 有没有一种方法可以在Spring Boot异常处理程序中一次捕获从web请求抛出的所有异常?我知道我可以在用注释的方法中捕获异常类型数组,但它不是我所说的类型。我需要一个异常对象列表之类的东西。我已经试过了 但Spring无法找到合适的解析器: 它只捕捉一个可抛物体,工作很好: 但是,如果在同一请求中有不同的参数冲突,如和,该怎么办? 如果不可能处理异常列表,如何满足RFC-7807(参见http