인프런 커뮤니티 질문&답변

gxpk0721님의 프로필 이미지

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

프론트 컨트롤러 도입 - v1

frontController 객체 생성시점

작성

·

184

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

package hello.servlet.web.frontcontroller.v1;
import hello.servlet.web.frontcontroller.v1.controller.MemberFormControllerV1;
import hello.servlet.web.frontcontroller.v1.controller.MemberListControllerV1;
import hello.servlet.web.frontcontroller.v1.controller.MemberSaveControllerV1;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

//v1하위 어떤게 와도 해당 서블릿 호출된다.
@WebServlet(name = "frontControllerServletV1", urlPatterns = "/front-controller/v1/*")
public class FrontControllerServletV1 extends HttpServlet {

  private Map<String, ControllerV1> controllerMap = new HashMap<>();

  public FrontControllerServletV1() {
    System.out.println("FrontControllerServletV1.FrontControllerServletV1 인스턴스 생성 실행");
    controllerMap.put("/front-controller/v1/members/new-form", new MemberFormControllerV1());
    controllerMap.put("/front-controller/v1/members/save", new MemberSaveControllerV1());
    controllerMap.put("/front-controller/v1/members", new MemberListControllerV1());
  }

  @Override
  protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    System.out.println("FrontControllerServletV1.service");

    String requestURI = request.getRequestURI();
    ControllerV1 controller = controllerMap.get(requestURI);

    controller.process(request,response);
  }

}


이 프론트 컨트롤러도 하나의 서블릿 객체인데 서블릿 객체는 요청이 들어올때(최초 로드)한번 실행되고 그 이후부터는 객체를 재사용하는걸로 아는데 서버를 구동하면 저 프론트 컨트롤러 객체가 생성됩니다. 해당 url(urlPatterns = "/front-controller/v1/*"))로 요청을 하지 않았는데 이유가 뭐죠?

답변 1

1

안녕하세요. gxpk0721 님, 공식 서포터즈 OMG입니다.

서블릿 객체는 요청이 들어올 때가 아닌 서버가 시작될 때 초기화 단계에서 생성됩니다. FrontControllerServletV1 객체는 서버 구동 시 생성되고 준비 상태가 됩니다. 이후 요청이 들어올 때 이 인스턴스를 재사용합니다.

감사합니다.

gxpk0721님의 프로필 이미지

작성한 질문수

질문하기