response.sendError()会显示Tomcat默认错误页面,而不是web.xml指定的错误页面。

3
我正在尝试使用一个servlet来处理一个简单的Web应用程序的错误,对于在web.xml中使用exception-type明确定义的任何错误,它都能很好地工作。然而,如果我尝试使用HttpServletResponse.sendError方法发送HTML错误代码,web.xml似乎无法捕获该错误,并且仅显示特定HTML状态码的Tomcat默认错误页面。
我的错误处理servlet有一些“catch-all”通用错误页面,如果它不匹配特定的错误代码,它将生成这些页面,因此错误根本没有传递到servlet,我完全不知道为什么会出现这种情况。
以下是我web.xml文件的相关片段:
<error-page>
  <error-code>400</error-code>
  <location>/Error</location>
</error-page>
<error-page>
  <exception-type>java.lang.Throwable</exception-type>
  <location>/Error</location>
</error-page>

以下是我试图在servlet中发送的错误示例:

if (thing.getSizeOfThing() == null || thing.getQuantity() <= 0) {
    response.sendError(400);
}

我的错误处理servlet将根据错误代码或异常类型以及生成错误的servlet显示相关的错误页面。正如我所提到的,这对于异常非常有效,但对使用sendError方法发送的错误根本不起作用。
我确保响应中的最小内容大小问题不是问题(或者不应该是问题),因为我没有收到特定于浏览器的错误页面,而是tomcat的通用400错误页面。
非常感谢您的帮助!
1个回答

1
解决:
问题出在空指针异常上,我在错误处理Servlet中忽略了它,所以Tomcat默认显示了它自己的错误页面。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接