Deep Dive /Java Web /17-V5

17-V5. DispatcherServlet → ThymeleafView: render(model)

실제 뷰 렌더링 시작점은 DispatcherServlet의 render(...) 메서드가 view.render(...)를 호출하는 순간입니다.


이번 단계의 역할 — 모델과 요청·응답을 View에 넘겨 템플릿 렌더링을 시작한다

준비된 모델과 요청/응답 객체를 View 구현체로 넘겨, 실제 템플릿 렌더링을 시작하는 단계입니다.


호출 흐름 요약 — View 확보 → response.setLocale() → view.render(…)

  1. DispatcherServlet이 View 객체를 확보합니다.
  2. response.setLocale(...) 등 기본 응답 준비를 합니다.
  3. view.render(mv.getModelInternal(), request, response)를 호출합니다.
  4. ThymeleafView가 템플릿 처리로 들어갑니다.

호출 흐름 다이어그램 — DispatcherServlet이 ThymeleafView에 render()를 넘긴다

sequenceDiagram participant DS as DispatcherServlet participant View as ThymeleafView DS->>View: render(model, request, response)

핵심 코드 — mv.getStatus()를 응답에 반영하고 view.render()를 부른다

// DispatcherServlet.java
if (mv.getStatus() != null) {
    response.setStatus(mv.getStatus().value());
}
view.render(mv.getModelInternal(), request, response);

코드 해설 — DispatcherServlet은 누가 렌더링할지까지만 정하고 HTML 생성은 View에 맡긴다

이 단계부터는 Spring MVC 핵심 흐름이 아니라 View 구현체 내부 로직이 주도권을 가집니다. 즉 DispatcherServlet은 “누가 렌더링할지”까지만 결정하고 실제 HTML 생성은 View에게 맡깁니다.


설계 의도 — 프론트 컨트롤러는 전략 선택만 하고 실제 렌더링은 View에 위임한다

프론트 컨트롤러는 응답 전략 선택만 하고, 실제 렌더링 구현은 View 객체에 위임해 책임을 분리한 구조입니다.


다음 단계 연결 — 17-V6 TemplateEngine.process()가 호출되는 장면으로 이어진다

다음 문서 17-V6에서는 ThymeleafView.render(...) 내부에서 TemplateEngine.process(...)가 호출되는 장면을 봅니다.

← 이전: 17-V4. ViewResolver → DispatcherServlet: ThymeleafView 반환 | 다음: 17-V6. ThymeleafView → TemplateEngine