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