【发布时间】:2010-10-05 22:36:23
【问题描述】:
我有一个长时间处理请求的 servlet。它假设 继续在 doPost 内的循环中做事并通过 回应的作家。有效地连续追加数据 客户端浏览器。 但是当客户端只是关闭浏览器时,问题就会出现。尽管 servlet 中响应的写入器流的断开连接 永远不会关闭,因此 servlet 不知道 brocen 连接, 并继续将数据转储到写入器中而不会出现任何错误。那个怎么样 可能吗?以及如何检测和取消长请求处理 浏览器断开连接的情况?
我认为响应编写器上的 checkError() 应该可以解决问题,但它无法正常工作。任何想法为什么?
这是永不停止的 servlet 代码:
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
HttpSession session = request.getSession();
System.out.println("Session " + session.getId() + " started");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try
{
while (!out.checkError())
{
try
{
Thread.sleep(1000);
} catch (InterruptedException ex)
{
ex.printStackTrace();
}
Date date = new Date();
// TODO append output to the client browser here
out.println(".....");
System.out.println("Session " + session.getId() + "data sent at: " + date);
out.flush();
//break; // _TEST
}
} finally
{
System.out.println("Session " + session.getId() + " finished");
out.close();
}
}
谢谢,
迈克
【问题讨论】:
标签: java http servlets jakarta-ee browser