[Spring] MVC 프레임워크 만들기

정석·2024년 3월 25일

Spring

목록 보기
14/21
post-thumbnail

김영한의 MVC 강의 내용입니다.

1. FrontController

기존에 MVC 학습을 하며 Controller 패턴으로 값을 Model로 View에 전해주는 방식은 알고 있었다.

그치만 이번에 처음 알게된 FrontController를 보고 되게 편리하고 유용하게 쓰이는게 감격스러웠다.

FrontController란?

기존 Controller 단 앞에 request를 받는 대표 Controller를 말한다. 모든 요청은 여기서 받으며, 이 후 여러 컨트롤러로 뿌려주는 역할을 한다. 초반에 어떠한 URI로 요청이 들어오는지에 따라 Controller를 배정해주어야 하기에 Mapping 하는 과정을 거치며 이를 활용한다.

  • FrontController 구조


예제 코드

  • FrontController.java

@WebServlet(name = "frontControllerV1", urlPatterns = "/front-controller/v1/*")
public class FrontControllerServletV1 extends HttpServlet {

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

    public 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/members", new MemberListControllerV1());
    }

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("FrontControllerServletV1.service");

        // request로 들어온 URI를 읽는다.
        String requestURI = request.getRequestURI();

        ControllerV1 controller = controllerMap.get(requestURI);
        if (controller == null) {
            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
            return;
        }
        controller.process(request, response);
    }
}

0개의 댓글