我有一个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(); } }
谢谢,
麦克风