http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/package-summary.html

이곳에 보시면, 서블릿 컨텍스나 세션의 변화를 체크하여 리스너들이 있습니다.

리스너 인터페이스를 구현하여 클래스를 만들면 되구요 web.xml에 해당 리스너 클래스를 추가해 주시면 됩니다.

 

package com.cafe24.youmasan.common;

import java.sql.SQLException;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class LoggingListener
implements HttpSessionListener {

 public LoggingListener() {
 }

 public void sessionCreated(HttpSessionEvent hse) {
  HttpSession session = hse.getSession();
  session.setMaxInactiveInterval(60*30);//초단위로 세션유지 시간을 설정합니다
  System.out.println(session.getId()+": 세션이 생성되었습니다.");
 }


 public void sessionDestroyed(HttpSessionEvent hse) {

  HttpSession session = hse.getSession();
  System.out.println(session.getId()+": 세션이 소멸되었습니다."); 
 }

}

 

세션의 변화를 체크하기 위해 HttpSessionListener인터페이스를 구현해 리스너 클래스를 만들구요

 

web.xml <web-app>태그안에

   </servlet>
 <listener>
  <listener-class>com.cafe24.youmasan.common.LoggingListener</listener-class>
 </listener>

리스너를 등록해 주시면 됩니다.

 

중간에

 session.setMaxInactiveInterval(60*30);//초단위로 세션유지 시간을 설정합니다

설정을 통해 세션의 생명시간을 설정해 줄수 있습니다.

 

브라우저가 닫힐경우 session.invalidate()같은 세션종료 명령을 서버에 보내주지 못합니다.

그렇게 때문에 서버는 브라우저와 세션의 연결이 끊겼다는 사실을 모르고 마냥 요청을 기다리게 됩니다.

세션의 생명시간동안 응답이 없다면  그제서야 서버는 닫힌 브라우저와의 세션을 종료합니다.

 

인터페이스를 구현한

 public void sessionDestroyed(HttpSessionEvent hse) {}

메소드안에서 세션종료시 처리 로직을 추가해 주시면 됩니다.


출처 - http://blog.daum.net/nationisone/8197009



Posted by linuxism
,