<aside> 👉 서버가 시작되면 크롤링하는 코드
</aside>
package listnerCrawling;
import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;
import jakarta.servlet.annotation.WebListener;
import model.crawling.StoreCU;
import model.crawling.StoreGS25;
/**
* Application Lifecycle Listener implementation class ListnerCrawling
*/
@WebListener
public class ListnerCrawling implements ServletContextListener {
// 생성자
public ListnerCrawling() {
// 기본 생성자
}
/**
* 서버가 시작될 때 호출되는 메서드
*/
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("[리스너] 서버 시작됨, 크롤링 시작!");
try {
// CU 상품 크롤링
new StoreCU().makeSampleCU();
System.out.println("[리스너] CU 크롤링 완료!");
// GS25 상품 크롤링
new StoreGS25().makeSampleGS25();
System.out.println("[리스너] GS25 크롤링 완료!");
} catch (Exception e) {
System.out.println("[리스너] 크롤링 도중 오류 발생!");
e.printStackTrace();
}
}
/**
* 서버가 종료될 때 호출되는 메서드
*/
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("[리스너] 서버 종료됨.");
}
}
웹 애플리케이션이 시작되거나 종료될 떄 호출되는 콜백 메서드를 가진 인터페이스
@WebListener
어노테이션이 클래스가 리스너라는 것을 서버에게 알려주는 어노테이션
따로 web.xml에 등록하지 않아도 자동으로 감지
참고) 톰캣7 이상이면 가능하고 서블릿3.0 이상 환경에서 동작
항목 | 서블릿 (Servlet) | 리스너 (Listener) |
---|---|---|
정의 | 클라이언트의 요청을 처리하고 응답을 반환하는 Java 클래스 | 웹 애플리케이션의 상태 변화(이벤트)를 감지하고 자동으로 실행되는 클래스 |
목적 | HTTP 요청-응답 처리 (웹 페이지, API 등) | 이벤트 감지 및 후속 작업 처리 (초기화, 리소스 정리 등) |
실행 시점 | 클라이언트 요청이 들어올 때 실행 | 서버가 시작/종료되거나 세션, 요청이 생성/종료될 때 실행 |
사용 예시 | LoginServlet , BoardListServlet 등 |
ServletContextListener , HttpSessionListener 등 |
상속/구현 | javax.servlet.http.HttpServlet 상속 |
javax.servlet.*Listener 인터페이스 구현 |
web.xml 등록 | <servlet> 태그 |
<listener> 태그 또는 @WebListener |
리스너는 서블릿 기술에 포함되긴 하지만, HTTP 요청을 처리하는 기능은 전혀 없어.
대신, 웹 애플리케이션의 생명주기 이벤트(Lifecycle Event) 를 감지해서 자동 실행되는 이벤트 리스너 객체야.
예를 들어:
ServletContextListener
→ 서버 시작/종료 감지 (주로사용)HttpSessionListener
→ 세션 생성/삭제 감지ServletRequestListener
→ 요청 시작/종료 감지이런 것들은 직접적으로 웹 페이지를 처리하진 않지만, 백그라운드에서 중요한 작업들을 자동으로 처리함.