我执行使用的Servlet 3.0的服务器发送的事件javax.servlet.AsyncContext接口。
但我不明白,我应该如何处理像同行的断开I / O错误。
对于给定的AsyncContext ac = request.startAsync()
我可以调用ac.getResponse().getWriter().print(something)
,然后ac.getResponse.getWriter().flush()
它工作正常。 然而,当一个客户端断开连接,我没有得到一个错误-即使我附上一个监听器,它的onError
方法没有被调用。
我既码头8和Tomcat 7测试,它似乎从客户端断开不报告给应用程序。
有什么可以做检测通信错误?
问题是: ac.getResponse.getWriter().flush()
不抛出IOException
因此,为了在I / O操作来获得一个错误通知您需要使用ServletOutputStream
,而不是:
try {
ServletOutputStream out = ac.getResponse().getOutputStream();
out.print(stuff);
out.flush(); // throws IOException
}
catch(IOException e) {
// handle a error
}
这里有一个替代的解决方案,在情况下,它的使用更方便getWriter()
PrintWriter out = ac.getResponse().getWriter();
out.print(stuff);
out.flush(); // swallows IOException
if (out.checkError()) {
// handle error or throw out...
}
也就是说,为PrintWriter类确实提供再取回写错误的方法。