세션 유져 카운터 클래스

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SessionUserCounter implements HttpSessionListener {
  private static Logger logger = LoggerFactory.getLogger(SessionUserCounter.class);
  
  //  총 접속자 수
  public static int count;
  
  public static int getCount() {
    return count;
  }

  @Override
  public void sessionCreated(HttpSessionEvent event) {
    //  세션이 생성될 때 세션객체를 꺼내옴.
    HttpSession session = event.getSession();
    count ++;
    logger.error("\n\tSESSION CREATED : {}, TOTAL ACCESSER : {}", session.getId(), count);
  }

  @Override
  public void sessionDestroyed(HttpSessionEvent event) {
    // 세션이 소멸될 때
    count--;
    if( count < 0 ) count = 0;
    
    HttpSession session = event.getSession();
    logger.error("\n\tSESSION DESTROYED : {}, TOTAL ACCESSER : {}", session.getId(), count);
  }
  
}

 

web.xml 설정

  <listener>
    <listener-class>{패키지 경로}.SessionUserCounter</listener-class>
  </listener>

 

Java 소스에서 클래스를 불러와서 사용해도 되고, JSP에서 class를 import 해서 사용해도 된다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" trimDirectiveWhitespaces="true"
	import ="{패키지 경로}.SessionUserCounter"
%>
현재 접속자 수 : <%=SessionUserCounter.getCount()%>

 

 

스프링 허접이라 Lazy-Init SingleTon Pattern을 사용해야 하는지, 아니면 Listener에 등록된 객체이기 때문에 필요 없는지는 잘 모르겠다.

728x90
반응형

+ Recent posts