javaboiii의 Web

Web - 리스너(Listener)

javaboiii 2024. 9. 2. 17:15

WEB

리스너(Listener)란

리스너는 웹 애플리케이션의 다양한 이벤트를 감지하고 처리할 수 있는 특수한 형태의 서블릿 클래스임.

서블릿(Servlet)이라는 것은 자바 기반의 서버측 컴포넌트로, 웹 애플리케이션에서 클라이언트의 요청을 처리하고

응답을 생성하는 역할을 함.

리스너는 이러한 서블릿의 하위 클래스이며, 기본 서블릿 기능 외에도 특정 이벤트에 반응하여

추가적인 처리를 수행할 수 있음

웹 어플리케이션을 개발할 때, 특정 이벤트에 반응하거나 애플리케이션 상태를 감시해야 할 때가 있

이러한 기능을 제공하는 것이 '리스너(Listener)'임

 

POJO와 리스너의 차이

POJO (Plain Old Java Object): POJO는 간단한 자바 객체로, 특정 인터페이스를 구현하지 않거나 상속받지 않으며, 복잡한 제약이나 요구 사항 없이 순수한 자바 클래스를 의미.

 

리스너: 리스너는 서블릿 API를 상속받아 특정 이벤트를 감지하고 처리하는 특수한 자바 객체임

리스너는 POJO와 달리 웹 애플리케이션의 특정 이벤트에 반응하도록 설계된 클래스

즉, 리스너는 서블릿 API의 특정 인터페이스를 구현하거나, 서블릿 컨텍스트, 세션, 요청과 같은 웹 관련 객체에 대한 접근을 제공함 때문에 리스너는 not POJO임

서블릿과 리스너의 차이

서블릿: 클라이언트의 요청을 처리하고 응답을 생성하는 기능을 담당을 함

일반적으로 HTTP 요청과 응답을 처리하기 위해 사용

 

리스너: 웹 애플리케이션의 다양한 상태 변화나 이벤트를 감시하고 반응함

예를 들어, 애플리케이션이 시작되거나 종료될 때,

세션이 생성되거나 종료될 때 등의 이벤트를 감지할 수 있고 또 많은 옵션들이 있음

리스너의 설정 방법

웹.xml 설정 -

web.xml 파일에 리스너 클래스를 등록. 이 방식은 설정이 복잡하고 가독성이 떨어짐

<listener>
    <listener-class>com.example.MyListener</listener-class>
</listener>

 

어노테이션 사용 -

자바 어노테이션을 사용하여 리스너를 등록할 수 있음.

이 방식은 설정이 간편하고 가독성이 좋으며, 스프링 프레임워크와의 호환성도 좋음

 

@WebListener
public class SampleListener implements ServletContextListener {

    public SampleListener() { // 생성자
    
    }

    public void contextInitialized(ServletContextEvent sce)  { 
    	// 웹 구동(실행)시 한번 수행할 코드 부분
    	System.out.println("로그 : 리스너에서 웹 서버 구동(실행)을 감지함");
    	
    	// 샘플 데이터 DB에 저장하는 코드
    	ArrayList<BoardDTO> datas=Crawling.makeSample();
    	BoardDAO boardDAO=new BoardDAO();
    	for(BoardDTO data:datas) {
    		boardDAO.insert(data);
    	}
    }

    public void contextDestroyed(ServletContextEvent sce)  { 
        // 웹 서버 종료시 한번 수행될 코드 부분
    	
    	// ex) DB 연경 해제
    }
}

 

리스너를 활용하여 웹 애플리케이션의 초기 샘플 데이터를 설정하거나,

애플리케이션의 상태를 모니터링할 수 있음

ex) 웹 서버가 구동되면 최초 한 번만 데이터베이스에 샘플 데이터를 저장하는 작업

(샘플 데이터가 없다면 크롤링 데이터 추가하기)

 

리스너는 웹 애플리케이션의 이벤트를 감시하고 처리할 수 있는 도구임

서블릿과는 다른 역할을 수행하며, 어노테이션을 활용하면 보다 간편하고 효율적으로 리스너를 관리할 수 있