Java 检测到浏览器在http请求-响应周期中间关闭
场景:Java 检测到浏览器在http请求-响应周期中间关闭,java,servlets,browser,tcp,jetty,Java,Servlets,Browser,Tcp,Jetty,场景: 连接到java servlet的Web应用程序。(使用嵌入式码头) 高延迟请求,例如报告生成(需要几秒钟) 用户可以在http请求-响应周期之间关闭浏览器 问题: 如何在服务器端检测请求和响应周期之间关闭的浏览器 虽然这个问题可以通过使用来自UI的另一个请求来解决,但我想知道我们是否可以从通信协议本身获取信息?由于HTTP使用TCP/IP作为基本协议,我们是否应该能够将其检测为从连接启动器端关闭的连接 我浏览了ServletAPI以及用于配置jetty服务器的api,但没有找到任何密切相
有什么见解吗?当您尝试写入servlet输出流/写入程序时,会出现异常。谢谢您的回复。基本上是指向out.checkError()方法。我在寻找一种基于事件的机制,我可以在这两者之间检测到并可能停止处理。我认为不存在这样的事件,但您可以通过在客户端(javascript)中侦听
window.close()
并发出第二个ajax请求来触发您自己的事件。例如:$(窗口)。关闭(新函数(){…})
感谢您对Joakim的回复。慢慢接近这样一个事实:从java可能无法从TCP启动器获得连接关闭的通知。我从下到上检查,TCP协议在这种情况下指定了握手(在发起方和接收方之间)。我目前正在检查它在java环境中的可行性,并试图理解为什么常规java库中没有提供它。这篇文章很好地解释了为什么不通信就无法检测到关闭的连接。严酷的现实:)@arunvg,别忘了,Java(以及HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2、servlet和WebSocket)支持半封闭连接。