우리가 서버에 서블릿을 만들었다고 해서 스스로 작동하는 것이 아니고 서블릿을 관리해주는 것이 필요한데, 그러한 역할을 하는 것이 바로 서블릿 컨테이너 이다. 서블릿 컨테이너는 클라이언트의 요청(Request) 을 받아주고 응답(Response) 할 수 있게 웹 서버와 소켓으로 통신하며, 대표적인 예로 톰캣(Tomcat) 이 있다. 톰캣은 실제로 웹 서버와 통신하여 JSP(자바 서버 페이지) 와 Servlet 이 작동하는 환경을 제공해준다.

Untitled

Servlet Container 의 역할

Servlet 생명주기

Untitled

  1. 클라이언트의 요청이 들어오면 컨테이너는 해당 서블릿이 메모리에 있는지 확인하고, 없을 경우 init() 메소드를 호출하여 적재한다. init() 메소드는 처음 한번만 실행되기 때문에 서블릿의 쓰레드에서 공통적으로 사용해야 하는 것이 있다면 오버라이딩하여 구현하면 된다. 실행 중 서블릿이 변경될 경우, 기존 서블릿을 파괴하고 init() 을 통해 새로운 내용을 다시 메모리에 적재한다.
  2. init() 이 호출된 후 클라이언트의 요청에 따라서 service() 메소드를 통해 요청에 대한 응답이 doGet()doPost() 로 분기된다. 이때 서블릿 컨테이너가 클라이언트의 요청이 오면 가장 먼저 처리하는 과정으로 생성된 HttpServletRequest, HttpServletResponse 에 의해 request 와 response 객체가 제공된다.
  3. 컨테이너가 서블릿에 종료 요청을 하면 destroy() 메소드가 호출되는데 마찬가지로 한번만 실행되며, 종료시에 처리해야 하는 작업들은 destroy() 메소드를 오버라이딩하여 구현하면 된다.

https://mangkyu.tistory.com/14