Servlet, Listener, Filter는 모두 Java 웹 애플리케이션에서 사용되는 구성요소이다.
즉, 세가지 구성 요소 모두 Class라는 것이다.
하지만 세 가지 구성 요소는 실행 목적이 다르다.
Listener는 웹 애플리케이션의 생명 주기 이벤트를 감지하고 이벤트에 따라 특정 작업을 수행하는 클래스이다.
여기서 주요 이벤트로는 애플리케이션의 시작 및 종료
, 세션의 생성 및 소멸
, 요청 및 속성 변경
등의 이벤트가 있다.
그리고 Servlet Context 수준의 이벤트와 Session 수준의 이벤트가 존재하는데 각각 ServletContextListener
와 HttpSessionListener
인터페이스를 구현하여 사용한다.
contextInitialized(ServletContextEvent sce)
: 웹 애플리케이션이 초기화 될 때 호출
contextDestroyed(ServletContextEvent sce)
: 웹 애플리케이션이 소멸될 때 호출
즉, Listener의 실행 시점은 특정 이벤트가 발생했을 때 실행된다는 것이다.
Filter는 클라이언트의 HTTP 요청이 서블릿에 도달하기 전이나 후에 요청/응답 데이터를 가로채어 변경하거나 처리하는 클래스이다.
이러한 Filter는 체인 형태의 구조를 나타내고 있다. (동시에 실행되는 것이 절대 아니다 !!!)
init()
: 필터가 최초로 생성될 때 호출되며, 초기화 작업을 수행합니다.doFilter()
: 실제 필터링 작업을 수행하며, 다음 필터로 체인을 전달합니다.desttory()
: 필터가 소멸될 때 호출되며, 마무리 작업을 수행합니다.즉, Request에 의해서 실행될 서블릿 실행 전/후로 특별한 처리가 필요한 경우에 실행된다.
Servlet은 클라이언트의 HTTP 요청에 대한 동적인 콘텐츠를 생성하고 응답하는 자바 클래스이다. 즉, 요청(Request)에 의해서 실행된다.
하지만 특정 Servlet은 ContextListener 초기화와 동시에 같이 초기화를 해야한다면 load-on-startup
속성을 통해 함께 초기화할 수 있다. (DispatcherServlet 처럼 모든 요청을 분기하기 위한 경우 웹 컨테이너가 초기화됨과 동시에 ServeltContextListner가 초기화되면서 같이 메모리에 로드한다.)
-> load_on_startup업으로 호출될 때는 init()만 실행된다.
init()
: 서블릿이 최초로 생성될 때 호출되며 초기화 작업을 수행한다.service()
: 각 HTTP 요청에 대해 호출되는 메서드이며 실제 작업을 처리한다.destroy()
: 서블릿이 소멸될 때 호출되며, 마무리 작업을 수행한다.