当前位置:  开发笔记 > 编程语言 > 正文

浏览器关闭时Servlet长时间处理取消

如何解决《浏览器关闭时Servlet长时间处理取消》经验,为你挑选了0个好方法。

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

谢谢,
迈克

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有