我有一个JSP网页在Eclipse中的Tomcat服务器上运行。该网站有一个Java后端,它通过Servlet与之通信。一切正常,但我想要运行一个后台进程 - 比如一个Main方法。此方法应在服务器启动时启动。
我需要这个的原因如下:假设网页有不同的用户登录,我想跟踪他们的用户名并对他们做一些事情 - 也许创建会话来跟踪一些指标。
我意识到这样做的一种方法可能是检查我的方法是否在每次有人登录时运行。就像这样:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if (/* Method is not initialized */)
/*call Method*/
我想知道是否有更好的方法来启动此背景方法。
答案 0 :(得分:1)
您可以在Webapp的部署时启动您的流程。为此,您必须创建ServletContextListener。
只需创建一个类:
public class YourClassName implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent arg0) {
run your background stuff
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
stop your background stuff
}
}
并在web.xml中定义:
<listener>
<listener-class>
your class fully qualified name
</listener-class>
</listener>
如果您不想编写XML定义并且正在运行Java 6+,那么您也可以使用
注释您的类。@WebListener
答案 1 :(得分:0)
如果您希望/需要在部署应用程序时运行流程,则必须定义ServletContextListener
。但是根据您的要求详细信息,您似乎需要HttpSessionListener
来开始跟踪每个用户会话的开始。来自它的javadoc:
用于接收有关
HttpSession
生命周期更改的通知事件的界面。 (...)此接口的实现在其sessionCreated(javax.servlet.http.HttpSessionEvent)
方法中按其声明的顺序调用,并在其sessionDestroyed(javax.servlet.http.HttpSessionEvent)
方法中以相反的顺序调用。
您可能也可以检查会话属性的更改,因此请使用HttpSessionBindingListener
来完成此操作。