본문 바로가기
Spring Tutorial

[스프링MVC 29] 스프링 MVC 구조: 뷰 리졸버

by 미소5 2023. 8. 6.

[스프링MVC 28] 스프링 MVC 구조: 핸들러 매핑과 핸들러 어댑터 (tistory.com)

 

[스프링MVC 28] 스프링 MVC 구조: 핸들러 매핑과 핸들러 어댑터

지금은 전혀 사용하지 않지만, 과거에 주로 사용했던 스프링이 제공하는 간단한 컨트롤러로 핸들러 매핑과 어댑터를 이해해보자. 스프링도 처음에는 이런 딱딱한 형식의 컨트롤러를 제공했다.

joly156.tistory.com

View를 조회할 수 있도록 변경했다.

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@Component("/springmvc/old-controller")
public class OldController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("OldController.handleRequest");
        return new ModelAndView("new-form");
    }

}

실행해보면 컨트롤러는 정상 호출되지만, Whitelabel Error Page 오류가 발생한다.

 


  • application.properties 에 다음 코드를 추가
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
  • 스프링 부트InternalResourceViewResolver 라는 뷰 리졸버를 자동으로 등록하는데, 이때 application.properties 에 등록한  spring.mvc.view.prefix spring.mvc.view.suffix 설정 정보를 사용해서 등록한다.

 


이제 등록 폼(new-form)이 정상 출력된다! (뷰 리졸버가 잘 동작되었다)

실행 성공!

 


[스프링MVC 27] 스프링 MVC 구조 (tistory.com)

 

[스프링MVC 27] 스프링 MVC 구조

[스프링MVC 26] MVC 프레임워크 만들기: 유연한 컨트롤러 (tistory.com) [스프링MVC 26] MVC 프레임워크 만들기: 유연한 컨트롤러 [스프링MVC 25] MVC 프레임워크 만들기: 단순하고 실용적인 컨트롤러 (tistory.c

joly156.tistory.com

 

  • 스프링 부트가 자동 등록하는 뷰 리졸버 (일부 생략)(실제로는 더 많음)
    1.  BeanNameViewResolver : 빈 이름으로 뷰를 찾아서 반환 (예: 엑셀 파일 생성 기능에 사용)
    2.  InternalResourceViewResolver : JSP를 처리할 수 있는 뷰를 반환

 


  1. 핸들러 어댑터 호출
    • 핸들러 어댑터를 통해 new-form이라는 논리 뷰 이름을 획득한다.
  2. ViewResolver 호출
    • new-form이라는 뷰 이름으로 viewResolver를 순서대로 호출한다. BeanNameViewResolvernew-form이라는 이름의 스프링 빈으로 등록된 뷰를 찾아야 하는데 없다. InternalResourceViewResolver 가 호출된다.
  3. InternalResourceViewResolver
    • 이 뷰 리졸버는 InternalResourceView 를 반환한다.
  4. 뷰 - InternalResourceView
    • InternalResourceView는 JSP처럼 포워드forward() 를 호출해서 처리할 수 있는 경우에 사용한다.
  5. view.render()
    • view.render() 가 호출되고 InternalResourceViewforward()를 사용해서 JSP를 실행한다.

 

[스프링MVC 23] MVC 프레임워크 만들기: View 분리 (tistory.com)

 

[스프링MVC 23] MVC 프레임워크 만들기: View 분리

[스프링MVC 22] MVC 프레임워크 만들기: 프론트 컨트롤러 (FrontController) (tistory.com) [스프링MVC 22] MVC 프레임워크 만들기: 프론트 컨트롤러 (FrontController) FrontController 패턴 프론트 컨트롤러 서블릿 하나

joly156.tistory.com

 



  • InternalResourceViewResolver는 만약 JSTL 라이브러리가 있으면 InternalResourceView를 상속받은 JstlView 를 반환한다. JstlView는 JSTL 태그 사용시 약간의 부가 기능이 추가된다.

 

  • 다른 뷰는 실제 뷰를 렌더링하지만, JSP의 경우 forward() 통해서 해당 JSP로 이동(실행)해야 렌더링이 된다. JSP를 제외한 나머지 뷰 템플릿들은 forward() 과정 없이 바로 렌더링 된다.

 

 

728x90
반응형