ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 MVC
    스프링 2022. 12. 26. 15:52

    frontController의 역할을 하는 것은 스프링에서는 DispatcherServlet이라고 이름을 잡는다.

     

    DispatcherServlet

    스프링 MVC도 frontController패턴으로 구현되어 있다.

    DispacherServlet 서블릿 등록 DispacherServlet 도 부모 클래스에서 HttpServlet 을 상속 받아서 사용하고, 서블릿으로 동작한다.

    DispacherServlet은 @WebServlet과 같은 어노테이션이 없기 때문에 누군가가 서블릿 등록을 해야한다. 스프링 부트가 내장 톰캣을 띄울때 DispacherServlet을 등록하면서 내장톰캣을 띄운다. 이때 모든 경로에 대해서 매핑한다.

    urlPatterns = "/"

     

    흐름

    • 서블릿이 호출되면 HttpServlet 이 제공하는 serivce() 가 호출된다.
    • 스프링 MVC는 DispatcherServlet 의 부모인 FrameworkServlet 에서 service() 를 오버라이드 해두었다.
    • FrameworkServlet.service() 를 시작으로 여러 메서드가 호출되면서
    • DispacherServlet.doDispatch() 가 호출된다.
    protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
       HttpServletRequest processedRequest = request;
       HandlerExecutionChain mappedHandler = null;
       boolean multipartRequestParsed = false;
    
       WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);
    
       try {
          ModelAndView mv = null;
          Exception dispatchException = null;
    
          try {
             processedRequest = checkMultipart(request);
             multipartRequestParsed = (processedRequest != request);
    
             // Determine handler for the current request.
             mappedHandler = getHandler(processedRequest);
             if (mappedHandler == null) {
                noHandlerFound(processedRequest, response);
                return;
             }
             
             ...

     

    dispatch 뒤에 핸들러를 찾거나 호출해주는 역할을 모두 한다.

    getHandler를 통하여 맞는 핸들러를 꺼내고 이후에 getHanlderAdapter로 어댑터를 찾는다.

    핸들러 어댑터로 실제 호출을 한 후 , ModelAndView를 받아서 적용한다.

     

    스프링 MVC의 큰 장점은 DispathcerServlet 코드의 변경없이 원하는 기능을 변경하거나 확장할 수 있다. 인터페이스만 구현해서 DispatcherServlet에 등록하면 원하는 컨트롤러를 만들 수 있다.

    728x90

    '스프링' 카테고리의 다른 글

    스프링 MVC의 사용  (0) 2022.12.26
    핸들러 매핑, 핸들러 어댑터, 뷰 리졸버  (0) 2022.12.26
    MVC 만들어보기  (0) 2022.12.25
    MVC 이해해보자  (0) 2022.12.24
    로깅  (0) 2022.12.23

    댓글

Designed by Tistory.