본문 바로가기
Spring/MVC 1

5. 스프링 MVC - 구조 이해

by wch_t 2024. 3. 16.

[스프링 MVC 구조]

 

 

 

 

DispatcherServlet

: Spring MVC에서 프론트 컨트롤러 패턴을 구현한 것.

모든 클라이언트의 요청을 받아들여, 해당 요청을 처리할 적절한 컨트롤러와 매핑한다.

 

 

DispatcherServlet.doDispatch()

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

protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {

     HttpServletRequest processedRequest = request;
     HandlerExecutionChain mappedHandler = null;
     ModelAndView mv = null;
     
     // 1. 핸들러 조회
     mappedHandler = getHandler(processedRequest);
     if (mappedHandler == null) {
         noHandlerFound(processedRequest, response);
         return;
     }
     
     // 2. 핸들러 어댑터 조회 - 핸들러를 처리할 수 있는 어댑터
     HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
     
     // 3. 핸들러 어댑터 실행 -> 4. 핸들러 어댑터를 통해 핸들러 실행 -> 5. ModelAndView 반환 mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
     processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);

}



private void processDispatchResult(HttpServletRequest request, HttpServletResponse response, HandlerExecutionChain mappedHandler, ModelAndView mv, Exception exception) throws Exception {
           
     // 뷰 렌더링 호출
     render(mv, request, response);

}



protected void render(ModelAndView mv, HttpServletRequest request, HttpServletResponse response) throws Exception {

     View view;
     String viewName = mv.getViewName();
     
     // 6. 뷰 리졸버를 통해서 뷰 찾기, 7. View 반환
     view = resolveViewName(viewName, mv.getModelInternal(), locale, request);
     
     // 8. 뷰 렌더링
     view.render(mv.getModelInternal(), request, response);
     
 }

 

 

 

- Handler Mapping과 Handler Adapter

스프링 MVC에서는 기본적으로 어노테이션 기반의 컨트롤러를 대부분 사용하고 있다.

@Controller로 선언된 적절한 컨트롤러를 호출하기 위해, 정의되고 사용되는 것이 다음의 핸들러 매핑과 핸들러 어댑터이다.

 

 

[RequestMappingHandlerMapping]

- Controller 클래스나 메소드에 선언된 @RequestMapping과 구체 어노테이션(@GetMapping, @PostMapping 등)을 스캔한다.

- 요청 URL, HTTP 메소드, 파라미터, 헤더 등의 정보를 분석하여 가장 적절한 컨트롤러 메소드를 찾는 역할을 한다.

 

[RequestMappingHandlerAdapter]

- RequestMappingHandlerMapping에 의해 선택된 컨트롤러 메소드를 실제로 실행한다.

- @RequestBody, @ResponseBody, @RequestParam, @PathVariable 등의 어노테이션을 처리하기 위한 플로우를 제공한다.

 

 

 

 

- View Resolver

컨트롤러에서 반환된 view 이름을 실제 view 구현으로 매핑하여 렌더링할 수 있도록 한다.

예를 들어 'home' 이라는 view 이름을 반환하면, ViewResolver는 어떤 뷰 기술로 구현된 파일에 연결해야 하는지 결정한다.

 

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

7. 스프링 MVC - 웹 페이지 만들기  (0) 2024.03.19
6. 스프링 MVC - 기본 기능  (0) 2024.03.18
4. MVC 프레임워크 만들기  (0) 2024.03.14
3. 서블릿, JSP, MVC 패턴  (0) 2024.03.13
2. 서블릿  (0) 2024.03.11