본문 바로가기
WEB

[WEB] 12. 리스너

by ssunooo 2024. 9. 3.


리스너란?


1. 특수한 형태의 서블릿 클래스로 서블릿의 하위(자식) 클래스이다

2. 서블릿이므로 not POJO이고 기능이있어서 무거운 JAVA 클래스이다


3. 특수한 기능을 수행할 수 있는 not POJO 클래스이다

4. 초기 샘플데이터를 웹 크롤링을 활용하여 세팅하고 단 한번만 수행된다

 


리스너를 만드는 방법

 

"리스너" 는 모니터링, 감시하는 기능을 한다
웹 전반에서 행위가 일어나는지 감시한다

리스너는 기본생성자(당연히 있어야함)와 initialized(웹이 구동되면/사라지면 단한번만 수행됨)로 나뉘어 진다
servlet new를 추가하면 web.xml에 자동 추가 된다

리스너의 주요 개념

  1. 이벤트:
    • 이벤트는 사용자나 시스템에서 발생하는 특정 작업이나 상태 변경을 의미한다
      예를 들어, 버튼 클릭, 키 입력, 마우스 이동, 파일 업로드 등이 이벤트이다
  2. 리스너 인터페이스:
    • 리스너는 특정 이벤트를 감지하고 처리하기 위해 이벤트 리스너 인터페이스를 구현한다
      이 인터페이스는 이벤트 발생 시 호출될 메서드를 정의한다
  3. 이벤트 소스:
    • 이벤트를 발생시키는 객체를 이벤트 소스라고 한다
      예를 들어, GUI에서 버튼, 텍스트 필드 등이 이벤트 소스가 될 수 있다
  4. 이벤트 핸들러:
    • 이벤트 핸들러는 리스너가 구현한 메서드로, 이벤트가 발생했을 때 실행된다
      핸들러는 이벤트의 세부 정보를 확인하고 적절한 동작을 수행한다

 

리스너의 동작 과정

  1. 리스너 등록:
    • 이벤트 소스에 리스너를 등록한다
      예를 들어, 버튼에 클릭 이벤트 리스너를 등록한다
  2. 이벤트 발생:
    • 이벤트 소스에서 특정 이벤트가 발생하면, 해당 이벤트에 등록된 리스너가 호출된다
  3. 이벤트 처리:
    • 리스너가 이벤트를 처리하는 메서드가 실행되어, 이벤트에 대한 적절한 응답이나 처리가 이루어진다

 

다양한 리스너의 종류

  • ActionListener: 버튼 클릭, 메뉴 선택 등과 같은 액션 이벤트를 처리한다
  • MouseListener: 마우스 클릭, 진입, 퇴출 등 마우스 이벤트를 처리한다
  • KeyListener: 키보드 입력 이벤트를 처리한다
  • WindowListener: 창의 상태 변화(열기, 닫기, 최소화 등)를 처리한다

 

리스너의 활용

  • GUI 프로그래밍: 사용자 인터페이스에서 사용자와의 상호작용을 처리한다
  • 이벤트 기반 애플리케이션: 다양한 시스템 이벤트나 사용자 액션에 반응하는 애플리케이션을 만든다
  • 비동기 처리: 특정 작업이 완료되거나 특정 조건이 충족되었을 때 알림을 받기 위해 리스너를 사용할 수 있다

 

<리스너를 만든 예시>

package controller.common;

import java.util.ArrayList;

import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;
import jakarta.servlet.annotation.WebListener;
import model.common.Crawling;
import model.dao.BoardDAO;
import model.dto.BoardDTO;

@WebListener // xml 작성 == 어노테이션 추가
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(); // insert하려면 DAO 필요하다
    	System.out.println(datas);
    	/*
    	for(BoardDTO data:datas) {
    		boardDAO.insert(data); //
    	}
    	*/
    }

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

 

 

2024.09.03

'WEB' 카테고리의 다른 글

[WEB] 14. 필터(Filter)  (0) 2024.09.05
[WEB] 13. 효율적인 모달창(알람)  (1) 2024.09.04
[WEB] 11. 비동기 처리  (0) 2024.08.23
[WEB] 10. 핸들러맵핑과 싱글톤 패턴  (0) 2024.08.22
[WEB] 09. 스프링 프레임워크의 구조  (0) 2024.08.20