Servlet 2.1 부터 HttpSession 의 getSessionContext() 메소드가 Deprecate 되었다.
저렇게 가져온 HttpSessionContext 에서 getSession(id) 해버리면 끝났던 것이, 이제는 직접 Map 을 만들던가 하여
getSession(id) 를 구현해 주어야 하는 불편함이 생겼다.

아래 코드 처럼, HttpSessionListener 를 implement 하여 Session 이 생성되거나 사라질 때 마다 Map 에 넣어서 관리를 해주도록 코딩을 해야 한다. 나중에 현재 접속중인 사용자와 같은 기능을 할때에도 아래를 응용하여 잘 쓰면 된다.
   
     17 public class SessionListener implements HttpSessionListener{
     18
     19     public void init(ServletConfig config){
     20     }
     21
     22     /**
     23      * Adds sessions to the context scoped HashMap when they begin.
     24      */
     25     public void sessionCreated(HttpSessionEvent event){
     26         HttpSession    session     = event.getSession();
     27         ServletContext context     = session.getServletContext();
     28         Map            activeUsers = (Map)context.getAttribute("activeUsers");
     29
     30         activeUsers.put(session.getId(), session);
     31     }
     32
     33     /**
     34      * Removes sessions from the context scoped HashMap when they expire
     35      * or are invalidated.
     36      */
     37     public void sessionDestroyed(HttpSessionEvent event){
     38         HttpSession    session     = event.getSession();
     39         ServletContext context     = session.getServletContext();
     40         Map            activeUsers = (Map)context.getAttribute("activeUsers");
     41
     42         activeUsers.remove(session.getId());
     43     }
     44 }

직접 Java 코드에서 request.getSession(true); 했을 때, Listener 가 잘 Call 되지 않는다라는 글도 있었는데, 이점을 잘 테스트 하며 사용해보도록 한다.

그리고, Clustered 환경에서 혹시나 문제 소지가 있을 수도 있으니, 테스트 해가면서 사용한다.
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,