서블릿 컨테이너가 서블릿 인스턴스의 init() 메서드를 호출하여 초기화한다.
* 최초 요청을 받았을 때 한번 초기화 하고나면 그 다음 요청부터는 이 과정을 생략
서블릿이 초기화된 다음부터 클라이언트의 요청을 처리할 수 있다. 각 요청은 별도의 쓰레드로 처리하고 이때 서블릿 인스턴스의 service() 메서드를 호출한다.
이 안에서 HTTP 요청을 받고 클라이언트로 보낼 HTTP 응답을 만든다.
service()는 보통 HTTP Method에 따라 doGet()
, doPost()
등으로 처리를 위임한다.
서블릿 컨테이너 판단에 따라 해당 서블릿을 메모리에서 내려야 할 시점에 destroy()를 호출한다.
웹 애플리케이션에서 발생하는 주요 이벤트를 감지하고 각 이벤트에 특정 작업이 필요한 경우에 사용할 수 있다.
서블릿 컨텍스트 수준의 이벤트
컨텍스트 라이프사이클 이벤트
컨텍스트 애트리뷰트 변경 이벤트
세션 수준의 이벤트
세션 라이프사이클 이벤트
세션 애트리뷰트 변경 이벤트
톰캣이 실행되면서 생성된다.
서블릿 컨텍스트란 하나의 서블릿이 서블릿 컨테이너와 통신하기 위해서 사용되어지는 메서드들을 가지고 있는 클래스가 바로 ServletContext
다.
하나의 web application 내에 하나의 컨텍스트가 존재한다. Web application 내에 있는 모든 서블릿들을 관리하며 정보 공유를 할 수 있게 도와주는 역할을 담당하는 녀석이 바로 ServletContext다.
필터와 리스너 또한 등록하여 통신 간에 활용할 수 있다.
ServletConfig의 getServletContext()
를 사용하여 얻는다.
Servlet은 HttpServlet을 상속한다. 그리고 HttpServlet은 ServletConfig를 구현하고 있기 때문에 getServletContext() 메서드를 바로 이용할 수 있다.
Servlet extends (HttpServlet implements ServletConfig)
Spring MVC의 핵심
ContextLoaderListener가 만든 Root WebApplicationContext
DispatcherServlet은 RootWebApplicationContext
를 상속받는 WebApplicationContext
를 새로 만든다.
굳이 이러한 일련의 상속 과정을 거치는 이유는
여러 다른 서블릿들이 공유 자원을 사용할 가능성이 있기 때문이다.
DispatcherServlet에서 만든 WebApplicationContext는 Scope가 DispatcherServlet에 한정된다. 둘은 Scope가 다르기에 이러한 과정을 거치는 것이다.
Front Contoller의 역할을 한다.