我有一个servlet,它长时间处理请求.它假设
继续在doPost内部循环中执行操作并通过发送数据
响应出来的作家.有效地连续追加数据
客户浏览器.
但是当客户端关闭浏览器时问题就出现了.尽管
断开的连接响应的servlet中的编写器流
永远不会关闭,因此servlet不知道brocen连接,
并保持数据转储到编写器没有任何错误.那个怎么样
posssible?我如何检测和取消长请求处理
浏览器断开的情况?
继续在doPost内部循环中执行操作并通过发送数据
响应出来的作家.有效地连续追加数据
客户浏览器.
但是当客户端关闭浏览器时问题就出现了.尽管
断开的连接响应的servlet中的编写器流
永远不会关闭,因此servlet不知道brocen连接,
并保持数据转储到编写器没有任何错误.那个怎么样
posssible?我如何检测和取消长请求处理
浏览器断开的情况?
我应该在响应编写器上检查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();
- }
- }
谢谢,
麦克风