|
Numbers of Users Listing 6. Our user counter application has two main classes: SessionLifeCycleEventDemo and UserCounterServlet. The listener class, SessionLifeCycleEventDemo, implements both the ServletContextListener interface and the HttpSessionListener interface. import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
public class SessionLifeCycleEventDemo
implements ServletContextListener,
HttpSessionListener {
ServletContext servletContext;
int counter;
public void contextInitialized(
ServletContextEvent sce) {
servletContext = sce.getServletContext();
servletContext.setAttribute(("userCounter"),
Integer.toString(counter));
}
public void contextDestroyed(
ServletContextEvent sce) {
}
public void sessionCreated(
HttpSessionEvent hse) {
System.out.println("Session created.");
incrementUserCounter();
}
public void sessionDestroyed(
HttpSessionEvent hse) {
System.out.println("Session destroyed.");
decrementUserCounter();
}
synchronized void incrementUserCounter() {
counter = Integer.parseInt(
(String)servletContext.getAttribute(
"userCounter"));
counter++;
servletContext.setAttribute(("userCounter"),
Integer.toString(counter));
System.out.println("User Count: " + counter);
}
synchronized void decrementUserCounter() {
int counter = Integer.parseInt(
(String)servletContext.getAttribute(
"userCounter"));
counter–;
servletContext.setAttribute(("userCounter"),
Integer.toString(counter));
System.out.println("User Count: " + counter);
}
}
|