Servlet Class 생명 주기

HH_Nebula·2023년 1월 18일
0

서블릿의 생명주기

서블릿은 컨테이너에 의해 동작하므로 객체의 생성 및 종료 과정도 컨테이너 안에서 이루어진다. 이와 같이 객체의 생성에서 종료에 이르는 과정을 생명 주기라고 하며, 개발자는 필요에 따라 해당 생명 주기 안에서 적절한 기능을 구현할 수 있어야 한다.

  • 또한 웹의 특성상 비연결 구조로 인해 웹 페이지 간 데이터 공유가 되지 않는 문제 해결을 위해 컨테이너에 의해 생성되고 관리되는 특별한 객체인 Scope Object를 잘 활용할 수 있어야 한다.

서블릿 클래스는 기본적으로 doGet(), doPost()와 같이 HTTP 요청 메서드에 따라 필요한 메서드를 오버라이딩해 구현하며, 서블릿 컨테이너에 의해 객체의 생성과 소멸 등이 관리되므로 필요에 따라 특정 생명 주기 이벤트에 동작하는 메서드를 구현하기도 한다.

  1. 사용자 URL 요청에 따른 서블릿을 실행한다.
  2. 이때 서블릿 인스턴스가 생성되지 않았다면 인스턴스를 생성한 후 init() 메서드를 호출한다.
  3. 이미 객체가 생성되어 있는 경우라면 각 요청별로 서블릿 컨테이너에서 스레드를 생성해 서블릿의 service() 메서드를 호출한다.
  4. 사용자 요청에 따라 doGet(), doPost() 등의 메서드를 호출한다.
  5. 서블릿 컨테이너의 종료를 포함해 서블릿 변경 등 기존 서블릿을 종료해야 할 때 destroy() 메서드를 호출한다.

Servlet 초기화 : init()

클라이언트의 요청이 들어오면 컨테이너는 해당 서블릿이 메모리에 있는지 확인한다. 해당 서블릿이 메모리에 없다면 서블릿을 메모리에 적재해야 하는데 이 때 서블릿의 init() 메서드가 호출되며 각종 초기화 작업을 수행한다.

즉 init() 메서드는 처음 한번만 실행되므로 해당 서블릿에 각각의 스레드에서 공통적으로 사용하기 위해 필요한 작업이 있다면 init() 메서드를 오버라이딩해서 구현한다.

만일 실행 중 서블릿이 변경되는 경우에는 기존 서블릿은 종료되고 다시 시작되면서 init() 메서드가 호출된다.

요청/응답 : service()

init() 메서드는 최초 한번만 수행되고 이 후 요청은 스레드로 실행되며 service() 메서드를 통해 각각 doGet()이나 doPost()로 분기된다. 이때 파라메터로 HttpServletRequest와 HttpServletResponse 클래스 타입인 request와 response 객체가 제공되는데, 사용자 요청처리는 request로, 응답 처리는 response 객체로 처리한다.

Servlet 종료 : destroy()

컨테이너로부터 서블릿 종료 요청이 있을 때 destory() 메서드를 호출한다. init() 메서드와 마찬가지로 한번만 실행되며 서블릿이 종료되면서 정리해야할 작업이 있을 때는 destroy() 메서드를 오버라이딩해서 구현하면 된다.

profile
공부하고 기록하고 복습하고

0개의 댓글