错误页面返回状态代码200默认响应

jay*_*hao 5 java servlets exception-handling exception http

我们希望实施一个" 故障屏障 "策略来管理应用程序中的异常.我们的应用程序有一件事是"回传"响应的概念,基本上是一个无操作,我们希望返回优先投掷500,400等HTTP状态代码 - 例如我们面向外部的应用程序应该总是返回一个有效的响应,即使抛出了一个底层的异常 - 我们想要处理该应用程序的内部,并仍然返回一个有效的noop响应.

我们的第一个实现是一个Servlet过滤器,它将把所有请求包装在try/catch块中,并从catch返回默认返回,例如:

try{
  chain.doFilter()
} catch (Throwable t) {
  generatePassbackResponse(HttpServletRequest req, HttpServletResponse res)
}
Run Code Online (Sandbox Code Playgroud)

虽然这主要是有效的,并且感觉很好和干净(我们可以返回漂亮的文本,适当地设置内容/类型等),但一个问题似乎是当抛出Exception时,响应仍然通过Status-Code:500来实现.

HttpServletResponse.setStatus(200)没有效果,javadoc确实说它只适用于普通请求.

我们的第二个实现思路是我们可能必须转发到另一个页面,或者将一个errorPage插入到web.xml中并手动sendError到该页面 - 尽管我们对是否有人有特定的推荐感兴趣.

Ste*_*eal 0

你能不能只使用标准的 web.xml 配置:

<error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
</error-page>

<error-page>
    <location>/error.jsp</location>
    <exception-type>java.lang.Exception</exception-type>
</error-page>
Run Code Online (Sandbox Code Playgroud)

我看不出你还想做什么,而这还不能满足你的需求?如果这只是错误代码,那么我认为您可以使用响应对象来设置它。