我有一个java(7)网络应用程序(spring mvc)。企业要求在用户离开主页90秒后进行操作(显示弹出通知)。视图/页面都是jsp页面,所有页面都有页眉和页脚jspf。应用程序中没有太多网页 - 可能大约8个(更多关于数据)。
我正在寻找有关最佳方法的建议!我想在卸载事件中添加会话日期/时间值,然后每4或5秒(90秒不是任务关键!)检查此值,直到我达到90秒。
对于这个解决方案最让我印象深刻的是虽然它可能不会对用户体验造成太大影响但是它有点低效,因为我无法看到我将如何能够停止每次检查会话变量动作完成后即使5秒钟。
任何人都可以用更好的方法帮助我吗?
答案 0 :(得分:1)
本答案适用于服务器端Java解决方案,您可以使用Push。非常适合像Vaadin这样的服务器端框架,但对于简单的JSP页面可能有点过分。
Java 5及更高版本捆绑了用于在后台线程上调度任务的复杂类。这些类实现Executor
。
具体来说,ScheduledExecutorService
。您指定一个数字,如90和时间单位,如秒。您传递Callable
或Runnable
对象作为要执行的任务。 Java处理剩下的事情。如果需要监控完成情况,可以返回ScheduledFuture
,以便查询其状态。
请参阅Tutorial。
这项工作发生在后台线程上。因此,您的Callable / Runnable需要访问Servlet的主线程及其对象,因此您必须了解并发问题。
所有这些都已在StackOverflow上广泛讨论。因此,请搜索更多信息。
答案 1 :(得分:0)
不要忘记:当前页面可以控制Javascript。当浏览器离开页面时,任何挂起的超时都会被丢弃。
因此,您访问的页面是具有实际警报的页面。
主页的unload()函数可能有一种方法是在cookie或本地存储中写入内容,“在此特定时间[未来90秒],显示此消息。”< / p>
然后每个页面(可能是每个页面的标题)都必须查找某个内容,如果它在那里,并且时间仍在将来,请设置超时秒数;当超时到期时,弹出消息并删除内容。