-
[Spring] 뷰 리졸버(View Resolver)Back-end/Spring 2022. 3. 21. 11:42
안녕하세요 이번 포스팅은 스프링 내부에 있는 뷰 리졸버에 대해서 알아보겠습니다!!
OldController - 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"); } }
View를 사용할 수 있도록 다음 코드를 추가했습니다.
return new ModelAndView("new-form");
http://localhost:8080/springmvc/old-controller를 실행하면 웹 브라우저에 Whitelabel Error Page가 나오고 콘솔에 OldController.handleRequest가 출력됩니다.
실행해보면 컨트롤러를 정상 호출하지만 Whitelabel Error Page 오류가 발생합니다.
application.properties에 다음 코드를 추가해봅시다.
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=. jsp
뷰 리졸버 - InternalResourceViewResolver
스프링 부트는 InternalResourceViewResolver라는 뷰 리졸버를 자동으로 등록하는데, 이때 application.properties에 등록한 spring.mvc.view.prefix, spring.mvc.view.suffix 설정 정보를 사용해서 등록합니다.
뷰 리졸버 동작 방식
스프링 부트가 자동 등록하는 뷰 리졸버
1 = BeanNameViewResolver : 빈 이름으로 뷰를 찾아서 반환한다.
예) 엑셀 파일 생성 기능에 사용
2 = InternalResourceViewResolver : JSP를 처리할 수 있는 뷰를 반환한다.
1. 핸들러 어댑터 호출
핸들러 어댑터를 통해 new-form이라는 논리 뷰 이름을 획득합니다.
2. View Resolver 호출
new-form이라는 뷰 이름으로 viewResolver를 순서대로 호출합니다.
BeanNameViewResolver는 new-form이라는 이름의 스프링 빈으로 등록된 뷰를 찾아야 하는데 없습니다.
InternalResourceViewResolver가 호출됩니다.
3. 뷰 - InternalResourceView
InternalResourceView는 JSP처럼 포워드 forward()를 호출해서 처리할 수 있는 경우에 사용합니다.
4. view.render()
view.render()가 호출되고 InternalResourceView는 forward()를 사용해서 JSP를 실행합니다.
참고
Thymeleaf 뷰 템플릿을 사용하면 ThymeleafViewResolver를 등록해야 합니다. 최근에는 라이브러리만 추가하면 스프링 부트가 이런 작업도 모두 자동화해줍니다.
다음 포스팅에서는 스프링 MVC를 애노테이션 기반으로 시작해보겠습니다
'Back-end > Spring' 카테고리의 다른 글
[Spring] 로깅(Logging) 간단하게 알아보기 (0) 2022.03.21 [Spring] 스프링 MVC - 간단하게 시작해보기 (0) 2022.03.21 [Spring] 핸들러 매핑과 핸들러 어댑터 (0) 2022.03.21 [Spring] 스프링 MVC - 구조 이해 (0) 2022.03.20 [Spring] MVC 프레임 워크 만들기 ( 1 ), 프론트 컨트롤러, 어댑터 구조 (0) 2022.03.18