호돌이
2003-03-04 16:56:06
2
7505

HttpSessionListener VS HttpSessionBindingListener ????????????????


둘사이의 차이점이 뭔가요?

특히 세션이 죽을때 말이죠.

직접 테스트해본 소스파일을 같이 올립니다.

BeanTest 는 HttpSessionListener 를 implementation 했구요, BeanTest2 는 HttpSessionBindingListener  를 implementation  했습니다.

또한 Bean2 는 위의 Session 객체를 관리하는 빈인데요. 한번은 BeanTest 를 관리해보았고, 한번은 BeanTest2 를 관리해 보았습니다.

 

각각에 대해 테스트 해보니 결과가 다음과 같았습니다.

BeanTest : destroySession() 을 불러줄때 test 의 값 : null

BeanTest2 : valueUnbound() 을 불러줄때 test 의 값 : 처음에 세팅한 값. 즉 현제세션의 id

결론 : HttpSessionListener에서 destroySession() 함수는 현제 세션이 날라간 이후에 불려진다????

 

거참.. 이것과 관련한 글들을 읽어보았는데 어떤곳에는 HttpSessionListener 인터페이스를 사용하더군요.  ex: http://okjsp.pe.kr/bbs?act=VIEW&seq=25935&bbs=bbs4&keyfield=content&keyword=&pg=0

그리고 자료실->소스자료실 에서 살펴본 글에서는 HttpSessionBindingListener 인터페이스를 사용하구요. ex : http://okjsp.pe.kr/bbs?act=VIEW&seq=20524&bbs=bbs4&keyfield=subject&keyword=접속자&pg=0

 

알송 달송 하군요.. -_-;

0
  • 답변 2

  • 세브니
    2003-03-04 17:59:58
    저도 덕분에 javax.servlet.http 패키지 상의 interface를 볼 기회가 되었네요..
    HttpSessionActivationListener는 세션이 만들어지거나 없어지기 전에 발생한다는 내용이고.. 세션이 없어질때 세션의 내용을 persistent memory에 저장할 필요가 있을때 좋겠죠.. 톰캣 자체로 이걸 설정값으로 사용할 수 있구요.. 사용자도 이용가능하겠죠.. 이걸 구현하면
    HttpSessionAttributeListener는 세션에 특정 Attribute가 추가되거나 없어지거나 수정되면 발생하는 이벤트네요.. 어떤 경우에 쓰여질지는 잘 모르겠군요..
    HttpSessionBindingListener의 경우는 세션이 만들어진 이후에 bind되고, invalidate 되거나 time out 되는 경우 unbind된다고 하는군요..
    HttpSessionListener 또한 세션이 만들어지거나 없어지는 경우에 발생한다고 하는데.. 잠시봐서는 HttpSessionBindingListener와의 차이점이 드러나지 않는군요..
    Documentation상에서 보면 HttpSessionBindingListener쪽에서는 HttpSession으로의 See Also가 보이는데.. HttpSessionListener에서는 보이질 않네요..
    그래서 HttpSession 문서를 보니.. HttpSession Interface와 관련된 리스너로 두가지를 나타내고 있네요.. HttpSessionBindingListener와 HttpSessionActivationListener...
    사실 logout시에.. session.invalidate()를 수행하죠? 이때 HttpSessionBindingListener.valueUnbound() 함수가 수행될 겁니다. 그러니 로그아웃을 수행한다고 해도.. HttpSessionBindingListener를 이용해야 할듯 합니다.

    그럼 HttpSessionListener의 용도는 무얼까요?
  • 무지
    2003-08-04 17:47:06
    HttpSessionBindingListener 는 이 인터페이스를 임플리먼츠한 객체를 세션에 바인딩 시키거나 언바인딩 될때 이벤트가 발생합니다. 반면에 HttpSessionListener 인터페이스는 톰캣의 web.xml에 리스너로서 등록을 하면 해당사이트에서 세션이 생성될때 ,글구 소멸될때 발생합니다. 순수한 세션 카운팅을 할때 꼭 필요합니다. ^^;;
  • 로그인을 하시면 답변을 등록할 수 있습니다.