안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
데이터를 저장할 용도로 존재하는 객체
- pageContext
- HttpServletRequest
- HttpSession
- ServletContext
서블릿 리스너
- 웹 컨테이너가 관리하는 라이프 사이클 사이에 발생하는 이벤트를 감지하여 해당 이벤트 발생 시 해당 이벤트에 대한 일련의 로직을 처리하는 인터페이스
서블릿 이벤트 리스너 종류 (실제로는 더 많음!)
① ServletContextListener
- 웹 애플리케이션의 시작과 종료 시 자동으로 발생하는 이벤트
② ServletContextAttributeListener
- 웹 컨테이너에 저장된 속성의 값이 변경될 경우 발생하는 이벤트
③ HttpSessionListener
- HTTP 세션이 생성되거나 종료되는 시점에 발생하는 이벤트
④ HttpSessionAttributeListener
- HTTP 세션에 대한 속성의 값이 변경될 경우 발생하는 이벤트
⑤ HttpSessionActivationListener
- HTTP 세션이 활성화 또는 비활성화가 발생하려 할 때 감지
⑥ HttpSessionBindingListener
- 현재 세션에 객체가 추가되거나 해제될 때 발생하는 이벤트
접속한 사용자의 수 카운트
Listener 템플릿을 이용하여 SessionCounterListener를 생성하였습니다.
(Lifecycle - HttpSessionListener 인터페이스 구현)
@WebListener
- web.xml에 Listener 등록 처리
@WebListener
public class SessionCounterListener implements HttpSessionListener {
private static int activeSessions;
/**
* Default constructor.
*/
public SessionCounterListener() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpSessionListener#sessionCreated(HttpSessionEvent)
*/
public void sessionCreated(HttpSessionEvent se) {
activeSessions++;
System.out.println("[sessionCreated] 현재 세션 수 : " + activeSessions);
}
/**
* @see HttpSessionListener#sessionDestroyed(HttpSessionEvent)
*/
public void sessionDestroyed(HttpSessionEvent se) {
if(activeSessions > 0) {
activeSessions--;
}
System.out.println("[sessionDestroyed] 현재 세션 수 : " + activeSessions);
}
}
브라우저 새로고침 시 콘솔창
다른 브라우저에서 접속 시
세션 제거 시
(세션 제거는 invalidation처리 혹은 세션이 만료되는 것이므로 로그인 후 로그아웃 처리)
session이 삭제 되고 또 다른 session이 발급되기 때문에 바로 sessionCreated가 이뤄진 것을 확인할 수 있습니다.
속성 추가 및 삭제 이벤트 리스너
(changes to attributes - HttpSessionAttributeListener 인터페이스 구현)
@WebListener
public class MemberLoginListener implements HttpSessionAttributeListener {
/**
* Default constructor.
*/
public MemberLoginListener() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpSessionAttributeListener#attributeAdded(HttpSessionBindingEvent)
*/
public void attributeAdded(HttpSessionBindingEvent se) {
String name = se.getName();
Object value = se.getValue();
System.out.println("[attributeAdded] " + name + " = " + value);
if("loginMember".equals(name)) {
Member loginMember = (Member) value;
System.out.println("[회원로그인] " + loginMember.getMemberName() + "님 로그인!");
}
}
/**
* @see HttpSessionAttributeListener#attributeRemoved(HttpSessionBindingEvent)
*/
public void attributeRemoved(HttpSessionBindingEvent se) {
String name = se.getName();
Object value = se.getValue();
System.out.println("[attributeRemoved] " + name + " = " + value);
if("loginMember".equals(name)) {
Member logoutMember = (Member) value;
System.out.println("[회원로그아웃] " + logoutMember.getMemberName() + "님 로그아웃!");
}
}
/**
* @see HttpSessionAttributeListener#attributeReplaced(HttpSessionBindingEvent)
*/
public void attributeReplaced(HttpSessionBindingEvent se) {
}
}
※ attributedReplaced는 동일한 이름으로 다른 객체를 저장할 때(덮어쓰기) 호출되는 메소드
속성 등록 시 (로그인 처리)
속성 삭제 시 (로그아웃 처리)
세션이 제거 되면서 존재하던 속성도 제거 되므로 attributeRemoved 메소드가 실행되었습니다.
msg
아이디/비밀번호를 잘못 입력하였을 때 발생하는 msg는 한 번만 표시해주기 위하여 alert 실행 후 제거가 되었으므로 attributedAdded 메소드가 실행되고 attributeRemoved 메소드가 연이어서 실행된 것을 확인할 수 있습니다.
'Java > Servlet & JSP' 카테고리의 다른 글
JSP) 회원가입 처리하기 (0) | 2022.06.23 |
---|---|
JSP) 아이디 저장 체크 박스 설정/미설정, 쿠키의 종류 (0) | 2022.06.23 |
JSP) 기본적인 session과 cookie의 흐름, session의 유효기간 (0) | 2022.06.22 |
JSP) 웹 페이지 로그아웃 기능 구현하기 (0) | 2022.06.21 |
JSP) 웹 페이지 로그인 기능 구현하기 (0) | 2022.06.21 |