提前感谢所有人,
我已经覆盖了收集标头的HTTPServletResponse
,并且还整合了一个servlet过滤器,它使用这些标头并使用正确的方法设置它们(例如:500 error code
使用response.sendError(500)
)。我注意到,当在web.xml
中设置此过滤器时,从不使用任何具有errorPage
集的页面,并且我收到的消息是没有堆栈跟踪的默认tomcat 500
消息The server encountered an internal error () that prevented it from fulfilling this request.
日志中也没有写任何内容。我已经验证过滤器和被覆盖的HTTPServletResponse
没有抛出任何Exception
。另一个有趣的注意事项是,如果我注释掉我使用sendError
方法的行,它将使用指定的errorPage
,但随后将状态代码设置为200
。
再次感谢,
萨姆
答案 0 :(得分:1)
嗯,#sendError方法没有规定,要使用自定义错误页面。它指定错误条件立即发送到客户端,最后刷新响应缓冲区。由于Servlet API比JSP API更通用,因此行为取决于容器实现。在Servlet层中发送错误的最简单方法是在使用#sendError时显示容器的默认错误页面(这就是Tomcat的作用)。
解决方案是链接请求/响应,以便servlet容器的响应处理器可以委派给您的自定义错误页面,而不是立即发送错误。