서블릿 등록
서블릿 컨테이너에서 관리되는 웹 컴포넌트를 서블릿이라고 한다. 서블릿 컨테이너는 1개 이상의 서블릿을 관리할 수 서블릿 컨테이너는 웹 클라이언트로 요청을 받으면 여러개의 서블릿 중에서 어떤 서블릿에게 요청을 처리하면 될지를 결정하는데 그 과정을 매핑이라고 합니다. 매칭된 서블릿은 웹 응답을 만들기 위해 필요로하는 작업을 수행하고 작업을 종료하면 컨테이너가 다시 웹 클라이언트에게 웹 응답형태로 돌려줍니다.
package com.tobyspring.tobyspringboot;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServer;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import jdk.jfr.ContentType;
public class TobyspringbootApplication {
public static void main(String[] args) {
/*
Spring Boot에서 Tomcat Sublet 컨테이너를 내장해서 프로그앰에서 코드로
쉽게 사용할 수 있도록 제공하는 클래스 TomcatServletWebServerFactory
*/
TomcatServletWebServerFactory serverFactory = new TomcatServletWebServerFactory();
/*
웹서버 서블릿 컨테이너를 생성하는 함수 serverFactory.getWebServer()
리턴타입이 디폴트로 설정한 Tomcat이라는 명칭은 사라지고 WebServer명칭으로 된이유는
스프링 부트가 톰캣 외에 제티나 언더토우같은 다양한 서블릿 컨테이너를 지원할 수 있고
지원하되 일관된 방식으로 사용할 수 있도록 동작하게할 수 있도록 추상화 해놨기 때문이다.
*/
WebServer webServer = serverFactory.getWebServer(new ServletContextInitializer() {
/*
serverFactory를 통해서 서블릿 컨테이너가 생성되었다면 서블릿 컨테이너에
서블릿을 등록한다. 서블릿을 등록하는건 webserver생성시 ServletContextInitializer을
구현하는 객체를 매개변수로 전달하면 된다.
*/
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.addServlet("hello", new HttpServlet() {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 응답코드 설정
resp.setStatus(HttpStatus.OK.value());
// 헤더에 Content Type 명시
resp.setHeader(HttpHeaders.CONTENT_TYPE, "text/plain");
// Content Type과 일치하는 응답값 바디를 입력
resp.getWriter().println("Hello Servlet");
}
// /hello path 매핑
}).addMapping("/hello");
}
});
/*
Servlet 컨테이너 동작 함수
*/
webServer.start();
}
}
'Spring > 인프런 토비의 Spring Boot' 카테고리의 다른 글
섹션 3-5 [독립 실행형 서블릿 애플리케이션] 프론트 컨트롤러 (0) | 2024.05.30 |
---|---|
섹션 3-4 [독립 실행형 서블릿 애플리케이션] 서블릿 요청 처리 (0) | 2024.05.30 |
섹션 3-2 [독립 실행형 서블릿 애플리케이션] 서블릿 컨테이너 띄우기 (0) | 2024.05.30 |
섹션 3-1 [독립 실행형 서블릿 애플리케이션] Containerless 개발 준비 (0) | 2024.05.30 |
섹션 2-5 [스프링 부트 시작하기] HTTP 요청과 응답 (0) | 2024.05.29 |