Servlet Container 수동 초기화

청포도봉봉이·2023년 4월 5일
0

Spring

목록 보기
15/35
post-thumbnail

Servlet Container

서블릿 컨테이너(Servlet Container)는 서블릿을 실행하고 관리하는 런타임 환경을 제공하는 웹 서버의 일종입니다.

서블릿 컨테이너는 웹 서버와 연동하여, 클라이언트로부터 오는 HTTP 요청을 받아들이고, 해당 요청에 대해 적절한 서블릿을 실행하여 HTTP 응답을 생성합니다. 서블릿 컨테이너는 서블릿의 생명주기를 관리하며, 서블릿의 인스턴스를 생성하고 초기화하며, 요청이 왔을 때 해당 서블릿의 service() 메서드를 호출합니다.

서블릿 컨테이너는 여러 가지 기능을 제공하는데, 대표적인 기능으로는 다음과 같습니다.

  • 서블릿 라이프사이클 관리
    서블릿 컨테이너는 서블릿의 라이프사이클을 관리합니다. 즉, 서블릿의 인스턴스를 생성하고 초기화하며, 요청이 왔을 때 해당 서블릿의 service() 메서드를 호출합니다. 또한, 서블릿이 제거될 때 destroy() 메서드를 호출하여 자원을 정리합니다.

  • 멀티스레드 지원
    서블릿 컨테이너는 멀티스레드 환경에서 안전하게 서블릿을 실행할 수 있도록 보장합니다. 즉, 서블릿이 여러 클라이언트 요청을 동시에 처리할 수 있도록 스레드를 안전하게 제어합니다.

  • 요청과 응답 처리
    서블릿 컨테이너는 클라이언트 요청을 받아들이고, 해당 요청에 대해 적절한 서블릿을 실행하여 HTTP 응답을 생성합니다. 서블릿 컨테이너는 HTTP 요청을 파싱하고, 파라미터를 추출하고, HTTP 응답을 생성하는 등의 작업을 수행합니다.

  • 세션 관리
    서블릿 컨테이너는 웹 애플리케이션에서 세션을 관리합니다. 세션은 클라이언트와 서버 간의 상태 정보를 유지하기 위한 방법으로, 서블릿 컨테이너는 세션 ID를 생성하고, 세션을 저장하고, 세션 타임아웃을 처리하는 등의 작업을 수행합니다.

  • 보안
    서블릿 컨테이너는 웹 애플리케이션의 보안을 강화

Servlet Container 초기화 클래스 작성하기

package hello.container;

import jakarta.servlet.ServletContainerInitializer;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;

import java.util.Set;

public class MyContainerInitV1 implements ServletContainerInitializer {

    @Override
    public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException {
        System.out.println("MyContainerInitV1.onStartup");
        System.out.println("MyContainerInitV1 c = " + c);
        System.out.println("MyContainerInitV1 ctx = " + ctx);
    }
}
  • onStartup 메서드는 서블릿 컨테이너가 초기화될 때 자동으로 호출됩니다.
  • c 매개변수는 웹 애플리케이션에 포함된 클래스 집합을 나타내는 Set입니다. ctx 매개변수는 ServletContext 객체로, 웹 애플리케이션의 컨텍스트 정보를 제공합니다.

Servlet Container 초기화 클래스 등록하기

resources/META-INF/services/jakarta.servlet.ServletContainerInitializer
hello.container.MyContainerInitV1

  • 웹 어플리케이션 서버가 실행될때 MyContainerV1에서 onStartup을 호출하게 되고 Servlet Container가 초기화된다.

만약에 IDE intelliJ 환경에서 console에 system.out이 안찍힌다면

업로드중..

Build and run using을 Gradle로 하면 잘 나올거다!

profile
서버 백엔드 개발자

0개의 댓글