Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java/JSP中使用带有Servlet过滤器的errorPage指令_Java_Jsp_Tomcat - Fatal编程技术网

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

在Java/JSP中使用带有Servlet过滤器的errorPage指令,java,jsp,tomcat,Java,Jsp,Tomcat,提前感谢大家, 我已经重写了HTTPServletResponse,它收集头文件,并组合了一个servlet过滤器,该过滤器接受这些头文件,并使用适当的方法设置它们(例如:500 error codeusesresponse.senderro(500))。我注意到,当在web.xml中设置此筛选器时,任何设置了errorPage的页面都不会被使用,我收到的消息是默认的tomcat500消息,没有堆栈跟踪服务器遇到内部错误()这使它无法满足此请求。日志中也没有任何关于所发生情况的内容。我已验证筛选

提前感谢大家,

我已经重写了
HTTPServletResponse
,它收集头文件,并组合了一个servlet过滤器,该过滤器接受这些头文件,并使用适当的方法设置它们(例如:
500 error code
uses
response.senderro(500)
)。我注意到,当在
web.xml
中设置此筛选器时,任何设置了
errorPage
的页面都不会被使用,我收到的消息是默认的tomcat
500
消息,没有堆栈跟踪
服务器遇到内部错误()这使它无法满足此请求。
日志中也没有任何关于所发生情况的内容。我已验证筛选器和重写的
HTTPServletResponse
未引发任何
异常。另一个有趣的注意事项是,如果我注释掉使用
sendError
方法的行,它将使用指定的
errorPage
,但随后将状态代码设置为
200

再次感谢

Sam

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

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

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


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

感谢您的响应-我继续这样做,在我的过滤器中捕获错误,然后执行:request.getRequestDispatcher(ErrorHandlerPath).forward(请求,响应),但这仍然不允许我将状态头设置为500,它允许我绕过使用errorPage指令等,但在出现异常时执行的jsp页面中,仍然发送状态200。有什么想法吗?可以使用HttpServletResponse#setStatus(int)为此,容器必须选择一个已配置的错误页..setStatus()只适用于成功的请求,错误将在(某些?/大多数?)容器中覆盖它感谢响应-我继续这样做,在我的筛选器中捕获错误,然后执行:request.getRequestDispatcher(ErrorHandlerPath).forward(请求,响应),但这仍然不允许我将状态头设置为500,它允许我绕过使用errorPage指令等,但在出现异常时执行的jsp页面中,仍然发送状态200。有什么想法吗?可以使用HttpServletResponse#setStatus(int)为此,容器必须选择一个已配置的错误页..setStatus()只适用于成功的请求,错误将在(某些?/大多数?)容器中覆盖它