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);
   }
}