본문 바로가기

Java&JSP&Spring/JSP&Servlet

[JAVA/Servlet]웹 어플리케이션의 생명주기를 감시하는 리스너 활용방법(ServletContextListener)

[JAVA/JSP/Servlet]웹 어플리케이션의 생명주기를 감시하는 리스너 활용방법(ServletContextListener)

안녕하세요 미나라이입니다.

이번에는 웹어플리케이션의 생명주기를 감시해주는 리스너 기능에 대해서 알아보도록 하겠습니다.

프로젝트 환경

OS : Windows 10

IDE : Eclipse 2020-06 (4.16.0)

Java : 8

Jdk Version : 1.8.0_161

WAS : Tomcat 8.5.73

 

리스너 기능은 간단히 설명하면 웹프로젝트 전체가 시작되거나 종료될때 한번씩 호출됩니다.

서블릿 생성과 관련 없이 서버 전체를 기동하고 종료될때 한번씩 실행되는 부분이라고 보면 됩니다.

 

리스너 생성 방법도 2가지가 있는데 web.xml을 이용하는 방법과 어노테이션을 이용하는 방법이 있습니다.

 

web.xml을 이용하는 방법

리스너 클래스 작성

리스너를 추가하기 위해서는 리스너 전용 클래스를 만들고 지정된 이름의 메소드를 선언해주어야 합니다.

리스너 클래스는 어느 방법을 쓰던지 다 작성 해 주어야 합니다.

ContextListener.java

package com.test;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ContextListener implements ServletContextListener {
	// 서버 종료시 한번만 실행
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("Destroy Listener");
	}

	// 서버 동기시 한번만 실행
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("Init Listener");
	}
}

web.xml

추가한 리스너 클래스를 호출하기 위해 web.xml에 아래와 같이 추가 해 줍니다.

<listener>
	<listener-class>com.test.ContextListenerXml</listener-class>
</listener>

이제 서버를 실행 하고 리스너가 콘솔에 잘 찍혀있는지 확인 해 봅시다.

Init리스너가 잘 실행이 되었네요

이번에는 서버를 종료하고 결과를 확인 해 봅시다.

Destroy리스너가 잘 실행이 되었네요

어노테이션을 이용하는 방법

리스너 클래스 작성

어노테이션을 쓰면 web.xml에 따로 선언하지 않아도 되므로 조금 더 가독성이 좋고 편리합니다.

대신 import를 하나 더 해 주어야 합니다.

ContextListener.java

package com.test;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class ContextListenerAnnotation implements ServletContextListener {

	// 서버 종료시 한번만 실행
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("Destroy ListenerAnno");
	}

	// 서버 동기시 한번만 실행
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("Init ListenerAnno");
	}
}

서버를 실행 하고 리스너가 콘솔에 잘 찍혀있는지 확인 해 봅시다.

Init리스너가 잘 실행이 되었네요

이번에는 서버를 종료하고 결과를 확인 해 봅시다.

Destroy리스너가 잘 실행이 되었네요

web.xml , 어노테이션 양쪽 다 추가 했을 경우

양쪽 다 선언했을때 어느게 먼저 찍히는지 한번 해 봅시다.

init

destroy

xml이 어노테이션보다 먼저 실행되고 끝날때는 나중에 자원을 해제하고 있는 것을 확인 할 수 있네요

 

이상으로 간단하게 리스너 기능에 대해서 알아보았습니다.

728x90
반응형