3

我被要求编写一个基于 Java 的小型 Web 应用程序,该应用程序可以运行数小时,它可以实现为具有计算-打印-刷新循环的单个 JSP 页面。这工作正常。几个独立的计算将同时并行运行。

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

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

自从我做 JSP 以来已经有一段时间了。我可以放入一个 Javascript 库片段来做魔术或类似的事情,但我需要它独立于容器,因为我无法控制部署容器。

有什么建议么?

4

3 回答 3

2

阿贾克斯?

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

对不起,如果你觉得这很有趣,我只是一个初学者。

于 2013-11-13T15:40:33.020 回答
1

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

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

于 2013-11-13T15:42:13.650 回答
0

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

例如 Websockets RemoteEndpoint.sendPing @See:http ://docs.oracle.com/javaee/7/tutorial/doc/websocket.htm

于 2013-11-13T16:04:48.190 回答