[서블릿/JSP] 리스너

2024. 9. 2. 11:50·JSP

리스너?

단어의 뜻으로 보자면 듣는사람, 즉 청취자이다. 프로그래밍에서 리스너란 웹 애플리케이션의 특정 이벤트를 감지하고(== 모니터링, 감시) 처리하는 데 사용되는 컴포넌트(메서드 or 함수)이다. 주로 애플리케이션의 상태 변화에 따라 필요한 작업을 수행하거나 애플리케이션의 수명 주기와 관련된 이벤트를 처리하는 데 유용하다. 

서블릿을 상속받은 클래스인데, 서블릿을 상속받은 클래스는 filter, listener 이렇게 두 가지가 있다.

 


리스너의 종류

이벤트 소스
이벤트 리스너
발생 이벤트 객체
설명
 
 
 
ServletContext
 
ServletContextListener
 
ServletContextEvent
웹어플리케이션의 시작, 종료 이벤트에 대한 이벤트 리스너다. 핸들러 메서드에서는 ServletContext에 대한 참조를 얻을 수 있다.
 
ServletContextAttributeListener
 
ServletContextAttributeEvent
ServletContext에 attribute를 추가하거나 제거, 수정됐을 때에 대한 이벤트 리스너다. 핸들러 메서드에서는 추가하거나 제거, 수정된 attribute 정보를 얻을 수 있다.
 
 
 
HttpSession
 
HttpSessionListener
 
HttpSessionEvent
HTTP 세션의 시작, 종료 이벤트에 대한 이벤트 리스너다. 핸들러 메서드에서는 현재 세션 객체를 얻을 수 있다.
 
HttpSessionAttributeListener
 
HttpSessionBindingEvent
HttpSession에 attribute를 추가하거나 제거, 수정됐을 때에 대한 이벤트 리스너다. 핸들러 메서드에서는 추가하거나 제거, 수정된 attribute 정보를 얻을 수 있다.
 
 
 
 
ServletRequest
 
ServletRequestListener
 
ServletRequestEvent
클라이언트로부터의 요청으로 인한 ServletRequest 생성과 응답 이후 ServletRequest 제거시에 대한 이벤트 리스너다. 핸들러 메서드에서는 요청에 관련된 정보와 ServletContext에 대한 참조를 얻을 수 있다.
ServletRequestAttributeListener
ServletRequestAttributeEvent
ServletRequest에 attribute를 추가하거나 제거, 수정됐을 때에 대한 이벤트 리스너입니다. 핸들러 메서드에서는 추가하거나 제거, 수정된 attribute 정보를 얻을 수 있다.

이 외에도 HttpSessionActivationListener,  HttpSessionBindingListener, AsyncListener 등이 있다.

출처: https://dololak.tistory.com/616 [코끼리를 냉장고에 넣는 방법:티스토리]


 

그 중에 나는 ServletContextEvent에 대해 좀 더 깊게 알아보려고 한다.

 

서블릿 컨텍스트 리스너 (ServletContextListener)

목적: 서블릿 컨텍스트의 생명주기를 관리, 웹 애플리케이션이 시작될 때 생성되고 종료될 때 소멸됨

주요 메서드:

  • contextInitialized(ServletContextEvent sce): 서블릿 컨텍스트가 생성될 때 호출됨, 초기화 작업을 수행함
  • contextDestroyed(ServletContextEvent sce): 서블릿 컨텍스트가 소멸될 때 호출됨, 자원 해제 작업을 수행함

이클립스에서 리스너 파일을 만들어보자.

서블릿을 상속받은 클래스다보니 서블릿과 함께 묶여있는 것을 볼 수 있다.

클래스 이름을 설정한 후, 아래와 같이 설정하면 된다.

 

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
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 연결 해제
    }
	
}

 

 

위와 같이 로그를 찍어보고, 코드를 실행하면, 

(콘솔창에)로그가 찍히는 것을  볼 수 있다.

 

여기서 추가로 어노테이션 사용하는것과 xml 작성하는것은 동일한데, 

서블릿 new는 xml 설정이 들어갈 수 밖에 없는데 에러방지만 하고  요즘에는 @WebListener  어노테이션으로 직접 설정하는게 훨씬 더 보편적이기 때문에, 어노테이션을사용하였다. 

'JSP' 카테고리의 다른 글

[JSP, Servlet] 필터(Filter) ?  (0) 2024.09.05
[JSP] MVC, alert()  (1) 2024.09.04
HTTP 응답코드, 에러페이지 xml 코드  (0) 2024.08.19
[JSP] JSTL, EL, 커스텀 태그에 대해서  (0) 2024.08.16
[JSP] 요청방식, 응답방식  (0) 2024.08.12
'JSP' 카테고리의 다른 글
  • [JSP, Servlet] 필터(Filter) ?
  • [JSP] MVC, alert()
  • HTTP 응답코드, 에러페이지 xml 코드
  • [JSP] JSTL, EL, 커스텀 태그에 대해서
yn98
yn98
좌우명 : 여전할 것 인가, 역전할 것 인가? 백엔드 개발자가 되고싶은 역전하고 있는 개발자 꿈나무의 블로그입니다. 개발을 하면서 공부한 것들을 기록합니다. 24.06 ~
  • yn98
    개발 꿈나무
    yn98
  • 전체
    오늘
    어제
    • 분류 전체보기 (131)
      • Python (3)
      • 공부 (7)
      • DB (7)
      • JAVA (24)
      • JSP (9)
      • jQuery (2)
      • HTML (3)
      • Spring (20)
      • 웹 (4)
      • C (1)
      • Git (2)
      • 에러일기 (19)
      • 프로젝트 (6)
      • 책 (21)
        • 멘토씨리즈 자바 (14)
        • 2024 수제비 정보처리기사 (7)
      • 기타 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
    • Notion
  • 공지사항

  • 인기 글

  • 태그

    스프링 프레임워크
    @service
    정보처리기사 실기
    오버로딩
    recoverabledataaccessexception
    Spring
    aop
    ViewResolver
    생성자
    수제비
    멘토씨리즈 자바
    객체지향
    html
    정처기 실기
    2-layered 아키텍처
    jsp
    Di
    codeup 4891 : 행복
    어노테이션
    java
    티스토리챌린지
    이벤트 스케줄러
    @Component
    상속
    @repository
    정처기
    DispatcherServlet
    MVC
    정보처리기사
    오블완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
yn98
[서블릿/JSP] 리스너
상단으로

티스토리툴바