리스너란?
1. 특수한 형태의 서블릿 클래스로 서블릿의 하위(자식) 클래스이다
2. 서블릿이므로 not POJO이고 기능이있어서 무거운 JAVA 클래스이다
3. 특수한 기능을 수행할 수 있는 not POJO 클래스이다
4. 초기 샘플데이터를 웹 크롤링을 활용하여 세팅하고 단 한번만 수행된다
리스너를 만드는 방법
"리스너" 는 모니터링, 감시하는 기능을 한다
웹 전반에서 행위가 일어나는지 감시한다
리스너는 기본생성자(당연히 있어야함)와 initialized(웹이 구동되면/사라지면 단한번만 수행됨)로 나뉘어 진다
servlet new를 추가하면 web.xml에 자동 추가 된다

리스너의 주요 개념
- 이벤트:
- 이벤트는 사용자나 시스템에서 발생하는 특정 작업이나 상태 변경을 의미한다
예를 들어, 버튼 클릭, 키 입력, 마우스 이동, 파일 업로드 등이 이벤트이다
- 이벤트는 사용자나 시스템에서 발생하는 특정 작업이나 상태 변경을 의미한다
- 리스너 인터페이스:
- 리스너는 특정 이벤트를 감지하고 처리하기 위해 이벤트 리스너 인터페이스를 구현한다
이 인터페이스는 이벤트 발생 시 호출될 메서드를 정의한다
- 리스너는 특정 이벤트를 감지하고 처리하기 위해 이벤트 리스너 인터페이스를 구현한다
- 이벤트 소스:
- 이벤트를 발생시키는 객체를 이벤트 소스라고 한다
예를 들어, GUI에서 버튼, 텍스트 필드 등이 이벤트 소스가 될 수 있다
- 이벤트를 발생시키는 객체를 이벤트 소스라고 한다
- 이벤트 핸들러:
- 이벤트 핸들러는 리스너가 구현한 메서드로, 이벤트가 발생했을 때 실행된다
핸들러는 이벤트의 세부 정보를 확인하고 적절한 동작을 수행한다
- 이벤트 핸들러는 리스너가 구현한 메서드로, 이벤트가 발생했을 때 실행된다
리스너의 동작 과정
- 리스너 등록:
- 이벤트 소스에 리스너를 등록한다
예를 들어, 버튼에 클릭 이벤트 리스너를 등록한다
- 이벤트 소스에 리스너를 등록한다
- 이벤트 발생:
- 이벤트 소스에서 특정 이벤트가 발생하면, 해당 이벤트에 등록된 리스너가 호출된다
- 이벤트 처리:
- 리스너가 이벤트를 처리하는 메서드가 실행되어, 이벤트에 대한 적절한 응답이나 처리가 이루어진다
다양한 리스너의 종류
- 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 |