在Java / JSP中使用带有Servlet过滤器的errorPage指令

时间:2009-08-13 20:22:03

标签: java jsp tomcat

提前感谢所有人,

我已经覆盖了收集标头的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

再次感谢,

萨姆

1 个答案:

答案 0 :(得分:1)

嗯,#sendError方法没有规定,要使用自定义错误页面。它指定错误条件立即发送到客户端,最后刷新响应缓冲区。由于Servlet API比JSP API更通用,因此行为取决于容器实现。在Servlet层中发送错误的最简单方法是在使用#sendError时显示容器的默认错误页面(这就是Tomcat的作用)。

解决方案是链接请求/响应,以便servlet容器的响应处理器可以委派给您的自定义错误页面,而不是立即发送错误。