Servlet

Jakarta Servlet

소개

다양한 유형의 요청에 응답할 수 있지만, 주로 웹 서버에서 웹 어플리케이션을 호스팅하기 위한 웹 컨이너로 구현하는데 사용합니다.

원칙적으로 서블릿은 모든 클라이언트-서버 프로토콜을 통해 통신할 수 있지만, HTTP와 함께 사용되는 경우가 가장 많습니다. 원칙적으로 모든 서블릿은 GenericServlet 클래스를 확장할 수 있지만, 현실적으로는 모든 서블릿이 HttpServlet 클래스를 확장합니다. 따라서 “서블릿”이란 용어는 종종 “HTTP 서블릿”을 축약한 것으로 사용됩니다.

javax.servlet 패키지 계층 구조에 포함된 Servlet API는 웹 컨테이너와 서블릿 간의 예상되는 상호 작용을 정의합니다. javax.servlet.http 패키지는 GenericServlet의 HTTP에 특화된 하위 클래스를 정의합니다. 이 패키지에는 웹 서버와 클라이언트 간의 여러 요청과 응답을 추적하는 세션 관리 객체가 포함되어 있습니다.

생명주기

서블릿의 생명 주기에는 init(), service(), 그리고 destroy()라는 세 가지 중요한 메서드가 있습니다. 이들은 모든 서블릿에 의해 구현되며 서버에 의해 특정 시점에 호출됩니다.

  • 사용자가 특정 URL을 방문하려고 요청합니다.
    • 브라우저가 이 URL에 대한 HTTP 요청을 생성합니다.
    • 이 요청은 적절한 서버로 전송됩니다.
  • HTTP 요청이 웹 서버에 수신되고 서블릿 컨테이너(ex: 톰캣)로 전달됩니다.
    • 컨테이너는 이 요청을 특정 서블릿에 매핑합니다.
    • 서블릿이 동적으로 검색되고 컨테이너의 주소 공간으로 로드됩니다.
  • 컨테이너는 서블릿의 init() 메서드를 호출합니다.
    • 이 메서드는 서블릿이 메모리에 처음으로 로드될 때에만 호출됩니다.
    • 서블릿에 초기화 매개변수를 전달하여 자체를 구성할 수 있습니다.
  • 컨테이너는 서블릿의 service() 메서드를 호출합니다.
    • 이 메서드는 HTTP 요청을 처리하기 위해 호출됩니다.
    • 서블릿은 HTTP 요청에서 제공된 데이터를 읽을 수 있습니다.
    • 서블릿은 클라이언트에 대한 HTTP 응답을 구성할 수도 있습니다.
  • 서블릿은 컨테이너의 주소 공간에 남아 있으며 클라이언트로부터 수신된 다른 HTTP 요청을 처리할 수 있습니다.
    • service() 메서드는 각 HTTP 요청마다 호출됩니다.
  • 컨테이너는 언젠가는 서블릿을 메모리에서 언로드하기로 결정할 수 있습니다.
  • 이 결정을 내리는 알고리즘은 각 컨테이너에 특정합니다.
  • 컨테이너는 서블릿의 destroy() 메서드를 호출하여 서블릿이 사용한 파일 핸들과 같은 리소스를 해제합니다. 중요한 데이터는 영속 저장소에 저장될 수 있습니다.
  • 서블릿 및 해당 객체에 할당된 메모리는 가비지 수집될 수 있습니다.