본문 바로가기
반응형
Spring/MVC

Dispatcher-Servlet(디스패처 서블릿)

by brightGarden02 2022. 12. 8.

Dispatcher-Servlet이란(What): 

Dispatcher-Servlet은 Spring MVC에서 핵심이다.

Dispatcher-Servlet은 클라이언트에서 들어오는 요청을 가장 먼저 처리하여 해당 컨트롤러에 전달한다.

프론트 컨트롤러(Front Controller)라고도 한다.

 

 

 

Dispatcher-Servlet 사용하는 이유(Why): 

디스패처 서블릿으로 인해 각 컨트롤러에 있는 공통 코드에 대해서  처리가 가능하다.

디스패처 서블릿 하나로 모든 클라이언트 요청을 받을 수 있기 때문

-> 들어오는 요청을 한 곳에서 다 받음 -> 편리함

디스패처 서블릿을 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 되기 때문

 

 

 

Dispatcher-Servlet 사용하는 방법(How):

 

1. FrontControllerServletV1 클래스를 만들고 HttpServlet을 상속받는다.

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

 

 

2. Map을 만든다. Key는 String, Value는 ControllerV1 인터페이스로 이루어져 있다.

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

 

 

3. 생성자를 만드는데 key는 url, value는 인터페이스를 구체적으로 구현하는 자식 클래스로 설정한다.

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

 

 

4. url(위치) 매핑 정보에서 컨트롤러를 조회한다.

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

    String requestURI = request.getRequestURI();

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

    controller.process(request, response);
}

 

 

 

getRequestURI()는 url에서 uri를 식별한다.    

 

 

 

Dispatcher-Servlet인 FrontContollerServletV1 전체코드

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

    protected 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", 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);
        if(controller == null) {
            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
            return;
        }

        controller.process(request, response);
    }
}

 

 

참고:

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., -

www.inflearn.com

 

'Spring > MVC' 카테고리의 다른 글

[MVC] @PathVariable, @RequestParam 사용법, 언제 사용하는지  (0) 2024.05.20
[MVC] MVC1, MVC2 차이점  (0) 2024.05.07

댓글


반응형
반응형