Servlet 생명주기(Life Cycle)

이진호·2022년 9월 13일
0

Servlet

목록 보기
2/2
post-thumbnail

Servlet 생명주기 (Life Cycle)

클라이언트가 요청을 할 때, Servlet은 아래와 같이 객체를 생성하고, 초기화하고, 요청을 처리하는 생명주기를 가지고 있습니다.

Servlet 생명주기(Life Cycle)

1. 클라이언트로부터의 요청이 서버의 서블릿 컨테이너(아파치 톰캣)으로 전달.

2. 컨테이너의 배포 서술자(Deployment Descriptor)에서 매핑된 서블릿 클래스를 탐색.

  • 배포 서술자(DD:Deployment Descriptor)는 서블릿 컨테이너와 서블릿 클래스를 매핑하는 xml 파일.
    배포 서술자
  • servlet 3.0부터는 xml 파일이 아닌 어노테이션으로도 지원(@WebServlet("/")).

3. 매핑된 Servlet 클래스에 해당하는 객체가 메모리에 로드되어 있지 않는 경우 해당 Servlet 객체를 생성, 메모리에 적재.

4. init() 메소드 호출

public void init(ServletConfig config) throws ServletException;
  • 서블릿 컨테이너에서 서블릿 인스턴스 생성 후 단 한번 호출.
  • 서블릿 컨텍스트 초기화를 목적으로 호출됨.
  • request를 받기 전 반드시 호출되어야 함.

5. service() 메소드 호출

public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException;
  • 서블릿 컨테이너에 의해 호출되며 request에 따른 response를 반환.
  • init() 메서드가 완전히 완료된 이후에 호출 가능.
  • 일반적으로 멀티 스레드 서블릿 컨테이너에 의해 동시 호출되기 때문에, 개발자는 service() 메소드 내에서 사용하는 리소스의 동시성 이슈를 신경써야함.
  • apache 톰캣의 경우, request의 http 메소드(GET, POST, PUT, DELETE 등)에 따라서 doGet(), doPost(), doPut(), doDelete() 등 처리 메서드 실행.

6. 서블릿 컨테이너 서비스 종료시 destroy() 메소드 호출.

public void destroy();
  • 서블릿 컨테이너에서 서비스 종료시점에 단 한번 호출.
  • 서블릿의 service() 메서드 실행 쓰레드가 모두 종료된 이후에 호출됨.
  • 이 메서드 호출 이후엔 service() 메서드는 더이상 호출 불가능.
  • 서블릿 내부에서 사용하는 리소스를 정리하기 위한 목적으로 호출됨.

Servlet Container

출처

0개의 댓글