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到该页面 - 尽管我们对是否有人有特定的推荐感兴趣.
你能不能只使用标准的 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)
我看不出你还想做什么,而这还不能满足你的需求?如果这只是错误代码,那么我认为您可以使用响应对象来设置它。