java – 浏览器关闭时Servlet长时间处理取消
发布时间:2020-12-15 03:06:28 所属栏目:Java 来源:网络整理
导读:我有一个servlet,它长时间处理请求.它假设 继续在doPost内部循环中执行操作并通过发送数据 响应出来的作家.有效地连续追加数据 客户浏览器. 但是当客户端关闭浏览器时问题就出现了.尽管 断开的连接响应的servlet中的编写器流 永远不会关闭,因此servlet不知道
我有一个servlet,它长时间处理请求.它假设
继续在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(); } } 谢谢, 解决方法
解决这个问题的唯一真正方法是让浏览器不断告诉你它仍然在那里,比如说每5-10秒.如果你在没有听到任何声音的情况下走了一分钟,你就会认为客户已经离开并忘记了你在做什么.
有几种方法可以实现这个: >元刷新:我不喜欢这个,因为它对用户来说是令人不安和明显的; 没有真正的方法可以检测客户端是否仍在阅读您发送的内容. TCP连接死亡需要时间,而客户端的路径通常是间接的(通过代理等等),所以忘记检测它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 为什么要从float转换为double更改值?
- java – 用其他东西替换花括号内的内容(例如{1})[复制]
- JAVA 基础编程练习题7 【程序 7 处理字符串】
- 在Java中对枚举进行完全切换会产生“缺少返回语句”错误
- Java Array数组 遍历 四种方式(包含 Lambda 表达式遍历)
- java – System.out.println,System.err.println
- spring boot自定义配置源操作步骤
- ConcurrentHashMap底层实现原理(JDK1.8)源码分析
- Java hibernate从表中选择多行并将结果分配到列表中
- java – 在C类的方法m中,是不是this.getClass()总是C?