【发布时间】:2016-04-01 17:48:00
【问题描述】:
我的 RSS servlet 对 OutputStream out 的 HttpServletResponse 和它的 writer 使用 try-with-resource。在某些情况下,SomeException 在生成 RSS 文档时被抛出,在这种情况下,我需要向客户端返回 HTTP 状态 500:
try (ServletOutputStream out = response.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(out, "utf-8")) {
response.setContentType("text/xml");
// Generate RSS here
} catch (SomeException e) {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage());
return;
}
但是,在调用 response.sendError() 时,$out$ 已经关闭,我收到 IllegalStateException 说响应已经提交(关闭流似乎会自动提交响应)。
如果我将 out 和 writer 的初始化移到 try 块之外并在 finally 块中关闭它们(Java7 之前的方式),错误代码会正确发送。
我想知道是否有办法继续使用 try-with-resource 并且在发生异常时仍然能够返回错误代码。
谢谢!
【问题讨论】:
-
您可以使用 outer try-with-resources 和 inner try-catch...
标签: servlets exception-handling try-with-resources