Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSP:检测浏览器是否有;“走了吗?”;?_Java_Jsp_Jetty_Maven Jetty Plugin - Fatal编程技术网

Java JSP:检测浏览器是否有;“走了吗?”;?

Java JSP:检测浏览器是否有;“走了吗?”;?,java,jsp,jetty,maven-jetty-plugin,Java,Jsp,Jetty,Maven Jetty Plugin,我被要求编写一个小型的基于Java的web应用程序,它可以运行数小时,可以实现为一个带有计算打印刷新循环的JSP页面。这个很好用。几个独立的计算将同时并行运行 我希望能够检测到用户对计算不再感兴趣(通过关闭浏览器或重新加载等),以便我可以中断并正确关闭计算 使用Jetty 9作为容器的初始实验表明,容器没有通知线程另一端的浏览器停止接受输出(使用Chrome进行测试),而不是抛出InterruptedException 我已经有一段时间没有做JSP了。我可以添加一个Javascript库代码段来

我被要求编写一个小型的基于Java的web应用程序,它可以运行数小时,可以实现为一个带有计算打印刷新循环的JSP页面。这个很好用。几个独立的计算将同时并行运行

我希望能够检测到用户对计算不再感兴趣(通过关闭浏览器或重新加载等),以便我可以中断并正确关闭计算

使用Jetty 9作为容器的初始实验表明,容器没有通知线程另一端的浏览器停止接受输出(使用Chrome进行测试),而不是抛出InterruptedException

我已经有一段时间没有做JSP了。我可以添加一个Javascript库代码段来执行魔术或类似操作,但我需要它独立于容器,因为我无法控制部署容器

有什么建议吗?

AJAX

你不能试试AJAX吗?正如你所说的Javascript魔术,我想你可以试试。每隔一段时间发送一个AJAX(带有时间戳),表示该用户还活着。一旦请求停止发送,你可以假设他已经走了!这样就可以关闭线程


抱歉,如果您觉得这很有趣,我只是个初学者。

添加会话侦听器。当用户注销或服务器注意到与浏览器的连接丢失时,它将最终删除会话并调用所有会话侦听器


只需将会话超时设置为5分钟。

您可能需要查看WebSocket。我不确定您的AS是否支持这一点,或者它对您的应用程序是否有意义。如果它看起来太多,而您只是想要一些简单的东西,那么您可以使用
SessionListener
(尽管您可能会被包含在超时中),使用提供AJAX推送的JSF库,或者只编写您自己的AJAX推送

e、 g.WebSocket
RemoteEndpoint.sendPing

@请参阅:

也许是时候考虑一下Aysnc servlets(或)comet了,浏览器将作为客户端在服务器上注册。据我所知,目标容器符合Java EE 1.4。Jetty 9.1符合Java EE 7的Web配置文件。@JoakimErdfelt这就是我现在使用的。目标容器将不是jetty。这是一种绝对合法的异步归档方式。HTTP的世界。但是,需要在客户端启用脚本。但是如果没有问题的话,消失的客户端比等待会话超时更快被识别,例如,允许一个程序在会话超时只有几分钟的情况下运行一整晚。这就是为什么我把它调回0,你在我眼中的输入非常好。我看到了一条消息,像“你真的想关上窗户吗?”之类的。从我们的JSFIDLE中可以看到这个例子。如果可能的话,为什么不能使用这个事件向服务器发送一个ajax调用,说这个用户已注销。