Java 프레임워크 만들기 - JSP

자바 서블릿 리퀘스트 리스너 만들기 - Java Servlet Listener ServletRequest , 이클립스(Eclipse)

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

"ServletRequestListener"는 "ServletRequest"가 웹 애플리케이션의 범위에서 들어오거나 나가는 요청에 대해 알림 이벤트를 수신하기 위한 인터페이스입니다. ("Interface for receiving notification events about requests coming into and going out of scope of a web application.")

"ServletRequestListener"는 "requestInitialized"는 요청이 초기화될 때, "requestDestroyed"는 요청이 파기될 때 호출됩니다. 요청 초기화 시점은 첫 번째 서블릿 또는 필터에 들어가려고 할 때이고 요청 파기 시점은 마지막 서블릿 또는 첫 번째 필터를 종료할 때입니다.

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

"ServletRequestAttributeListener"는 "attributeAdded"는 요청 속성이 추가될 때, "attributeRemoved"는 요청 속성이 삭제될 때, "attributeReplaced"는 요청 속성이 변경될 때 호출됩니다.

"ServletRequestListener", "ServletRequestAttributeListener"을 하나의 리스너로 만들고 이벤트가 호출되는 시점을 출력을 통해 확인해보겠습니다.

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

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

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

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

"Servlet request events"의 "Lifecycle", "Changes to attributes"를 체크합니다.

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

인터페이스를 추가하거나 삭제합니다.

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

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

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

 

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

@WebListener

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

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

처리 방식은 동일합니다.

 

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

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

public void requestInitialized(ServletRequestEvent sre)  { 
	System.out.println("ServletRequestListener 초기화 실행");
}

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

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

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

public void requestDestroyed(ServletRequestEvent sre)  { 
	System.out.println("ServletRequestListener 파괴 실행");
}

 

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

[Console]

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

 

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

"Console"탭을 클릭합니다.

[Console]

ServletRequestListener 초기화 실행
(웹 브라우저로 부터 요청 받으면 WAS의 서블릿 컨테이너(Servlet Container)가 서블릿(Servlet)을 생성합니다.)

ServletRequest에 속성 변경 - 속성명 : org.apache.catalina.ASYNC_SUPPORTED, 속성 값 : true
(생성된 서블릿에 비동기처리를 위한 속성을 추가합니다.)

ServletRequest에 속성 추가 - 속성명 : name, 속성 값 : 철수
(서비스(TestService1) 처리)

ServletRequestListener 파괴 실행
(WAS의 서블릿 컨테이너(Servlet Container)가 서블릿(Servlet) 처리하고 웹 브라우저로 전달한 다음 서블릿(Servlet)을 파괴합니다.)
728x90
반응형