Java检查HttpResponse是否仍然存在

时间:2012-11-02 03:49:09

标签: java ajax httpresponse

有没有办法从java servlet检查httpresponse是否仍然“活着?”例如,在我的情况下,我从浏览器向servlet发送ajax请求。在这种情况下,它是一个轮询请求,因此它可以轮询最多5分钟,当servlet准备好响应数据时我想检查用户是否关闭了浏览器窗口,或者移动到另一个页面等。单词,检查发送数据到响应是否真的会做任何事情。

2 个答案:

答案 0 :(得分:0)

Java Servlet Response没有任何基于请求和响应行为的方法。如果您想检查状态,那么您可能需要在较低级别工作,例如TCP/IP Sockets,其中包含以下几种状态检查方法:

boolean isBound()
Returns the binding state of the socket.

boolean isClosed()
Returns the closed state of the socket.

boolean isConnected()
Returns the connection state of the socket.

boolean isInputShutdown()
Returns whether the read-half of the socket connection is closed.

boolean isOutputShutdown()
Returns whether the write-half of the socket connection is closed.

答案 1 :(得分:0)

通常,可以通过在实际消息之前发送虚拟有效负载来解决此问题。

如果套接字被切断,则抛出IOExceptionSocketException或类似内容(取决于库)。从技术上讲,浏览器应该在您离开页面或关闭浏览器(或任何类似的东西)时切断连接,但我发现实现细节可能会有所不同。例如,较旧版本的FF在离开页面时适当地关闭连接,但较新的版本(特别是使用AJAX时)往往会打开连接。

这是您在实际消息之前使用虚拟数据包的主要原因。另一个重要的考虑因素是超时。我之前已经完成了轮询,你需要实现某种心跳以保持连接存活或增加服务器超时(尽管请记住,某些浏览器也可能有超时 - 超时,你无法控制)。 / p>

我强烈建议尝试支持(至少部分)Websocket解决方案,而不是轮询或推动AJAX。

相关问题