public class SessionBindingListener implements HttpSessionBindingListener {
private ServletContext context;
public SessionBindingListener(ServletContext context) {
this.context = context;
}
public void valueBound(HttpSessionBindingEvent event) {
context.log("BOUND to " + event.getSession().getId());
}
public void valueUnbound(HttpSessionBindingEvent event) {
context.log("UNBOUND from " + event.getSession().getId());
}
}
※ 자, 그럼 이걸 어디에 써먹어야 할까요???
이 예제는 보시면 아시겠지만 session.setAttribute 즉 session key/value 에 binding 되면 event 가 발생하게 되는 거랍니다.
그니까.. isNew() 할때.. 필요한 걸 session 에 저장한 다음.. session expired 되거나 하면 자동으로 삭제가 되도록 필요한 기능을 구현 하면 되겠죠.
불필요한 session 을 삭제 하거나 아니면 status 등을 처리 한다거나 할때.. 별도의 listener 없이 이걸 가지고 구현 하면 쉽게 할 수 있을 듯 합니다.
배도 고프고 해서 오늘은 여기까지만.. ㅎㅎ
실행 방법은 잘 아시죠.. servlet 하나 생성 하셔서 Run on Server 하시면 되요..
-> http://localhost:8080/proto.session/CreateSessionBinding
[실행로그]
2012. 3. 22 오후 7:32:39 org.apache.catalina.core.ApplicationContext log
정보: BOUND to C7A16EA8F0687784DAA17367695BA501
2012. 3. 22 오후 7:32:39 org.apache.catalina.core.ApplicationContext log
정보: new session.binding : C7A16EA8F0687784DAA17367695BA501
2012. 3. 22 오후 7:33:37 org.apache.catalina.core.ApplicationContext log
정보: UNBOUND from C7A16EA8F0687784DAA17367695BA501
- 보시면 처음 페이지가 열리면 BOUND 되구요.
- Session expired 되면 UNBOUND 됩니다.
- 또는 session.setAttribute 해서 binding 하셔도 UNBOUND 됩니다.
- tomcat 의 web.xml 에서 아래 처럼 변경했습니다. (1분)
<session-config>
<session-timeout>1</session-timeout>
</session-config>
역시 배고파서 작성하는 글은.. 좀 부족하내요.. ㅋㅋ
집에 와서 다시 업데이트..
위에 CreateSessionBinding 서블릿 클래스를 보시면 빨간 부분 보이시죠..
그렇습니다.
위에 설명한 "또는 session.setAttribute 해서 binding 하셔도 UNBOUND 됩니다." 는.. set 한 key 에 대해서 binding 되면 event 가 발생을 하게 되는 것입니다.
테스트가 부족했으니 내일 다시 최종 확인 결과 올리겠습니다. ㅡ.ㅡ;;
[최종테스트결과]
- 이론이 역시 맞습니다.
session.setAttribute("session.id", new SessionBindingListener(context));
- session 에 listener 를 등록해 줬기 때문에 이넘이 bound, unbound 되면 event 가 발생하게 되는 것입니다.