javax.servlet.http 패키지에 속한 추상 클래스인 HttpServlet 클래스는
javax.servlet 패키지에 속한 추상 클래스인 GenericServlet을 상속받는다.
GenericServlet 클래스는 Servlet과 ServletConfig 인터페이스를 구현implements한다.
Servlet과 ServletConfig 인터페이스는 javax.servlet 패키지에 속한 인터페이스이다.
우리가 자바에서 작성하는 서블릿은 아래와 같이 HttpServlet을 상속받는 형태다.
서블릿을 위한 말 그대로 일종의 '컨테이너' 서블릿의 생성, 실행, 파괴를 담당.
톰캣을 웹 서버이자 서블릿 컨테이너라고 생각하면 되겠다...
웹 서버가 HTTP 요청을 받는다.
웹 서버는 요청을 서블릿 컨테이너로 전달한다. (forward)
서블릿이 컨테이너에 없다면, 서블릿을 동적으로 검색하여 컨테이너의 주소 공간에 로드한다.
컨테이너가 서블릿의 init()메소드를 호출하면, 서블릿이 초기화된다. (서블릿이 처음 로드됐을 때 한번만 호출)
컨테이너가 서블릿의 service()메소드를 호출하여 HTTP 요청을 처리한다. (요청 데이터를 읽고, 응답을 만들어낸다) 서블릿은 컨테이너 주소에 남아있고, 다른 HTTP 요청들을 처리할 수 있다.
웹 서버는 동적으로 생성된 결과를 올바른 위치에 반환한다.
서블릿 컨테이너의 가장 중요한 기능은 요청을 올바른 서블릿에 전달해 처리되도록 하고, JVM이 해당 요청을 처리한 후에는 생성된 결과를 올바른 장소에 동적으로 반환해주는 것이다.