[Spring] Servlet, Listener, Filter 비교

Woo Yong·2024년 1월 22일
2

Spring

목록 보기
12/15
post-thumbnail

Servlet, Listener, Filter는 모두 Java 웹 애플리케이션에서 사용되는 구성요소이다.
즉, 세가지 구성 요소 모두 Class라는 것이다.

하지만 세 가지 구성 요소는 실행 목적이 다르다.

Listener

Listener는 웹 애플리케이션의 생명 주기 이벤트를 감지하고 이벤트에 따라 특정 작업을 수행하는 클래스이다.

여기서 주요 이벤트로는 애플리케이션의 시작 및 종료, 세션의 생성 및 소멸, 요청 및 속성 변경 등의 이벤트가 있다.

그리고 Servlet Context 수준의 이벤트와 Session 수준의 이벤트가 존재하는데 각각 ServletContextListenerHttpSessionListener 인터페이스를 구현하여 사용한다.

생명주기 메서드

  • contextInitialized(ServletContextEvent sce) : 웹 애플리케이션이 초기화 될 때 호출

  • contextDestroyed(ServletContextEvent sce) : 웹 애플리케이션이 소멸될 때 호출

즉, Listener의 실행 시점은 특정 이벤트가 발생했을 때 실행된다는 것이다.

Filter

Filter는 클라이언트의 HTTP 요청이 서블릿에 도달하기 전이나 후에 요청/응답 데이터를 가로채어 변경하거나 처리하는 클래스이다.

이러한 Filter는 체인 형태의 구조를 나타내고 있다. (동시에 실행되는 것이 절대 아니다 !!!)

주요 구현해야하는 메서드 / 생명주기 메서드

  • init() : 필터가 최초로 생성될 때 호출되며, 초기화 작업을 수행합니다.
  • doFilter() : 실제 필터링 작업을 수행하며, 다음 필터로 체인을 전달합니다.
  • desttory() : 필터가 소멸될 때 호출되며, 마무리 작업을 수행합니다.

즉, Request에 의해서 실행될 서블릿 실행 전/후로 특별한 처리가 필요한 경우에 실행된다.

Servlet

Servlet은 클라이언트의 HTTP 요청에 대한 동적인 콘텐츠를 생성하고 응답하는 자바 클래스이다. 즉, 요청(Request)에 의해서 실행된다.

하지만 특정 Servlet은 ContextListener 초기화와 동시에 같이 초기화를 해야한다면 load-on-startup속성을 통해 함께 초기화할 수 있다. (DispatcherServlet 처럼 모든 요청을 분기하기 위한 경우 웹 컨테이너가 초기화됨과 동시에 ServeltContextListner가 초기화되면서 같이 메모리에 로드한다.)
-> load_on_startup업으로 호출될 때는 init()만 실행된다.

주요 구현해야하는 메서드 / 생명주기 메서드

  • init() : 서블릿이 최초로 생성될 때 호출되며 초기화 작업을 수행한다.
  • service() : 각 HTTP 요청에 대해 호출되는 메서드이며 실제 작업을 처리한다.
    - doGet()
    • doPost()
  • destroy() : 서블릿이 소멸될 때 호출되며, 마무리 작업을 수행한다.
    따라서, Servlet은 Servlet Container(Tomcat)가 요청을 받으면 실행된다고 할 수 있다.
profile
Back-End Developer

0개의 댓글