Java 프레임워크 만들기 - JSP

자바 서블릿 HTTP 세션 리스너 만들기 - Java Servlet Listener HttpSession, 이클립스(Eclipse)

carrotweb 2021. 4. 9. 13:22
728x90
반응형

"HttpSessionListener"는 "HttpSession" 라이프 사이클 변경에 대해 알림 이벤트를 수신하기 위한 인터페이스입니다. ("Interface for receiving notification events about HttpSession lifecycle changes.")​

"HttpSessionListener"는 "sessionCreated"는 세션이 생성될 때, "sessionDestroyed"는 세션이 파기될 때 호출됩니다.

"HttpSessionAttributeListener"는 "HttpSession" 속성 변경에 대해 알림 이벤트를 수신하기 위한 인터페이스입니다. ("Interface for receiving notification events about HttpSession attribute changes.")​

"HttpSessionAttributeListener"는 "attributeAdded"는 세션 속성이 추가될 때, "attributeRemoved"는 세션 속성이 삭제될 때, "attributeReplaced"는 세션 속성이 변경될 때 호출됩니다.

"HttpSessionListener", "HttpSessionAttributeListener"을 만들고 이벤트가 호출되는 시점을 출력을 통해 확인해보겠습니다.

1. "test2" 프로젝트의 "Java Resources"에서 "src/main/java"의 "com.hom.project.test2.listener"에서 오른쪽 버튼을 클릭하여 컨텍스트 메뉴 [New > Listener]를 클릭합니다.

"Create Listener"창의 "Class name"에 "TestHttpSessionListener"를 입력합니다.

"Next >"버튼을 클릭합니다.

이벤트를 수신하고 싶은 이벤트를 선택합니다.

"Http session events"의 "Lifecycle", "Changes to attributes"를 체크합니다.

"Next >"버튼을 클릭합니다. 또는 "Finish"버튼을 클릭해서 완료할 수 있습니다.

"Interfaces"에 "HttpSessionListener"와 "HttpSessionAttributeListener"인터페이스를 동시에 받아 구현하는 것을 알 수 있습니다.

"Finish"버튼을 클릭합니다.

"TestHttpSessionListener.java"파일이 생성됩니다.

 

현재 "Dynamic Web Module 3.1"로 구성되어 있어 "TestHttpSessionListener.java"에 "@WebListener" 어노테이션을 사용하고 있습니다.

@WebListener

"web.xml"에서 구성하고 싶다면 "TestHttpSessionListener.java"에 "@WebListener" 어노테이션을 삭제한 후 "web.xml"에 다음과 같이 추가하면 됩니다.

<listener>
	<listener-class>com.home.project.test2.listener.TestHttpSessionListener</listener-class>
</listener>

처리 방식은 동일합니다.

 

"TestHttpSessionListener.java"의 "constructor"와 "sessionCreated", "attributeAdded", "attributeRemoved", "attributeReplaced", "sessionDestroyed"에 출력문을 코딩하여 어느 시점에서 호출되는 지를 확인해하기 위해서입니다.

public TestHttpSessionListener() {
	System.out.println("HttpSessionListener 생성자 실행");
}

public void sessionCreated(HttpSessionEvent se)  { 
	System.out.println("HttpSession 생성 실행 : " + se.toString());
}

public void attributeAdded(HttpSessionBindingEvent event)  {
	System.out.println("HttpSession에 속성 추가 - 속성명 : " + event.getName() + ", 속성 값 : " + event.getValue());
}

public void attributeRemoved(HttpSessionBindingEvent event)  { 
	System.out.println("HttpSession에 속성 삭제 - 속성명 : " + event.getName() + ", 속성 값 : " + event.getValue());
}

public void attributeReplaced(HttpSessionBindingEvent event)  { 
	System.out.println("HttpSession에 속성 변경 - 속성명 : " + event.getName() + ", 속성 값 : " + event.getValue());
}

public void sessionDestroyed(HttpSessionEvent se)  { 
	System.out.println("HttpSession 파괴 실행 : " + se.toString());
}

 

2. "Servers"탭에서 "Tomcat8"를 선택하고 "start"버튼(start the server)을 클릭하고 "Console"탭을 클릭합니다.

[Console]

ServletContextListener 생성자 실행
HttpSessionListener 생성자 실행 - 추가된 리스너 생성자
("TestHttpSessionListener"의 "constructor" 실행)
ServletRequestListener 생성자 실행
ServletContextAttributeListener 생성자 실행
ServletContext 초기화 실행

3. 웹 브라우저에서 "http://localhost:8080/test2/testform.do"를 입력합니다.

"Console"탭을 클릭합니다.

[Console]

HttpSession 생성 실행 : javax.servlet.http.HttpSessionEvent[source=org.apache.catalina.session.StandardSessionFacade@1b0531c5]
(서블릿 필터(TestSecurityFilter)에서 "requestDispatcher.forward"되면서 JSP를 처리하면서 세션이 생성됩니다.)

 

[Console]

HttpSession에 속성 추가 - 속성명 : auth, 속성 값 : com.home.project.test2.vo.UserVO@403f18ae
(서비스(TestLoginService)의 "process"에서 인증 후 속성 추가)
728x90
반응형