오봉이와 함께하는 개발 블로그
스프링 MVC 1 - 뷰 리졸버 본문
728x90
뷰 리졸버
OldController - View 조회할 수 있도록 변경
@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");
}
}
http://localhost:8080/springmvc/old-controller로 실행하면 브라우저에 오류가 발생하고 콘솔에는 정상 출력된다.
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
설정 정보를 사용해서 등록한다.
권장하는 방법은 아니지만 return new ModelAndView("/WEB-INF/views/new-form.jsp");
로 작성해서 동작하기는 한다.
뷰 리졸버 동작 방식
스프링 부트가 자주 등록하는 뷰 리졸버
- 1 순위 : BeanNameViewResolver - 빈 이름으로 뷰를 찾아서 반환한다.
- 2 순위 : InternalResourceViewResolver : JSP를 처리할 수 있는 뷰를 반환한다.
1. 핸들러 어댑터 호출
핸들러는 어댑터를 통해 new-form이라는 논리 뷰 이름을 획득한다.
2. ViewResolver 호출
- new-form이라는 뷰 이름으로 viewResolver를 순서대로 호출한다.
- BeanNameViewResolver는 new-form이라는 이름의 스프링 빈으로 등록된 뷰를 찾아야 하는데 없다.
- InternalResourceViewResolver가 호출된다.
3. InternalResourceVieResolver
이 뷰 리졸버는 InternalResourceView를 반환한다.
4. 뷰 - InternalResourceView
InternalResourceView는 JSP처럼 forward()를 호출해서 처리할 수 있는 경우 사용한다.
5. view.render()
view.render()가 호출되고 InternalResourceView는 forward()를 사용해서 JSP를 실행한다.
참고
- InternalResourceViewResolver는 만약 JSTL 라이브러리가 있으면 InternalResourceView를 상속받은 JstlView를 반환한다.
- 다른 뷰는 실제 뷰를 렌더링하지만, JSP의 경우 forward() 통해서 해당 JSP로 이동(실행)해야 렌더링이 된다. JSP를 제외한 나머지 뷰 템플릿들은 forward() 과정 없이 바로 렌더링 된다.
- Thymeleaf 뷰 템플릿을 사용하면 ThymeleafViewResolver를 등록해야 한다. 최근에는 라이브러리만
추가하면 스프링 부트가 이런 작업도 모두 자동화해준다.
출처 : 인프런 김영한 지식 공유자님 강의 - 스프링 MVC 1편 백엔드 웹 개발 핵심 기술
728x90
'BE > Spring' 카테고리의 다른 글
스프링 MVC 1 - 스프링 MVC 컨트롤러 통합 (0) | 2022.08.12 |
---|---|
스프링 MVC 1 - 스프링 MVC 시작하기 (0) | 2022.08.12 |
스프링 MVC 1 - 핸들러 매핑과 핸들러 어댑터 (0) | 2022.08.12 |
스프링 MVC 1 - 스프링 MVC 구조 (0) | 2022.08.12 |
Spring - 테스트 코드 작성시 NPE (0) | 2022.07.22 |
Comments