Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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
在tomcat上运行的java servlet中,我可以使用什么为每个会话实现后台进程?_Java_Ajax_Tomcat_Servlets_Dojo - Fatal编程技术网

在tomcat上运行的java servlet中,我可以使用什么为每个会话实现后台进程?

在tomcat上运行的java servlet中,我可以使用什么为每个会话实现后台进程?,java,ajax,tomcat,servlets,dojo,Java,Ajax,Tomcat,Servlets,Dojo,我希望为每个用户运行一个函数,定期进行会话,检查用户是否处于活动状态。如果未激活,该函数将从servlet上下文中的用户列表中删除该用户,并清除该用户会话 我可以使用什么来为每个用户定期运行函数 据我所知,servletcontextlistener在servlet的生命周期中只运行一次,而不是针对每个用户,因此它不可用。此外,建议不要在servlet中使用线程 编辑: 用户(使用ajax)调用一个操作,该操作包含更新我为每个用户存储的变量的函数,该变量指示他们最后一次联系服务器的时间。您可能正

我希望为每个用户运行一个函数,定期进行会话,检查用户是否处于活动状态。如果未激活,该函数将从servlet上下文中的用户列表中删除该用户,并清除该用户会话

我可以使用什么来为每个用户定期运行函数

据我所知,servletcontextlistener在servlet的生命周期中只运行一次,而不是针对每个用户,因此它不可用。此外,建议不要在servlet中使用线程

编辑:
用户(使用ajax)调用一个操作,该操作包含更新我为每个用户存储的变量的函数,该变量指示他们最后一次联系服务器的时间。

您可能正在查找
javax.servlet.http.HttpSessionListener

创建一个,在
web.xml
中注册,然后让
sessionDestroyed
完成您的工作。

我可以用两种方法来思考:

  • 使用request.getSession().setMaxInactiveInterval(someValue)

  • 因为您使用的是ajax,所以与其发送“用户活动”值,不如发送实际的“终止会话”请求。这意味着更少的http调用,因为用户是否处于活动状态的逻辑在客户端,而实际的“会话终止”逻辑在后端。下面是一个场景:

    Javascript代码每分钟运行一次,以检查用户是否处于活动状态(不确定您实际看到的是什么,但情况不同)。如果5分钟后用户在客户端没有做任何事情,那么会向后端发送一个ajax调用以终止会话


  • 后台线程如何“检查用户是否处于活动状态”?您通常不会有到客户端的持久连接,因此您所能知道的只是客户端何时发送请求。通常,您要做的是让客户端定期发送心跳消息(例如,使用AJAX)。这不是您可以配置的会话生命周期已经为您做的事情吗?会话将过期,但当它过期时,我希望运行一个函数,将用户从servlet上下文中的变量中删除。我不知道当函数在web.xml文件中的会话过期时如何运行它。请不要生成其他线程。听录音,看起来很有希望。我将尝试实现它,看看它是否有效。谢谢