Spring/Spring MVC

ViewResolver

민철킹 2021. 5. 1. 16:37

위와 같이 ModelAndView에 논리주소를 담아 반환하여 해당 url로 접속해보면

 

위와 같은 404페이지가 뜨는데 이는 현재 ViewResolver가 없기 때문에 매칭되는 뷰를 찾지못했다는 오류이다. 

 


뷰 리졸버 : InternalResourceViewResolver

스프링부트는 InternalResourceViewResolver라는 뷰 리졸버를 자동으로 등록하는데,

이때 application.properties에 등록한 spring.mvc.view.prefix (접두사), spring.mvc.view.suffix(접미사)를

사용하여 등록한다.

  • 위와 같이 application.properties에 등록해두면 우리가 ModelAndView에 넣은 논리주소인 new-form과 더해져서
  • /WEB-INF/views/new-form.jsp의 뷰를 찾아들어가게 되는 것이다.
  • 참고로 retrun ModelAndView("/WEB-INF/views/new-form.jsp")와 같이 작성해도 동작은 하지만 권장X

 

스프링 부트가 자동 등록하는 ViewResolver

  • BeanNameViewResolver : 빈 이름으로 뷰를 찾아서 반환
  • InternalResourceViewResolver : JSP를 처리할 수 있는 뷰를 반환
  • 다른 것도 훨씬 더 많음.(찾아보기)

 

1. 핸들러 어댑터 호출

  • 핸들러 어댑터를 통해 "new-form"이라는 논리 뷰 이름을 획득

2. ViewResolver 호출

  • "new-form"이라는 뷰 이름으로 viewResolver를 순서대로 호출
  • "BeanNameViewResolver"는 "new-form"이라는 이름의 스프링 빈으로 등록된 뷰를 찾는데 없음
  • "InternalResourceViewResolver" 호출

3. InternalResourceViewResolver

  • 이 뷰 리졸버는 InternalResourceView를 반환

4. 뷰 - InternalResourceView

  • InternalResourceView는 JSP처럼 forward()를 호출하여 처리할 수 있는 경우에 사용

5. view.render()

  • view.render()가 호출되고 "InternalResourceView"는 forward()를 사용하여 JSP 실행

 

 


InternalResourceViewResolver는 만약 JSTL 라이브러리가 있으면 InternalResourceView를 상속받은

JstlView를 반환 ==> JSTL 태그 사용시 약간의 부가 기능 추가

 

 

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

 

 

Thymeleaf 뷰 템플릿을 사용하면 ThymeleafViewResolver를 등록, 최근에는 라이브러리만 추가하면

스프링 부트가 이런 작업도 모두 자동화해줌

반응형

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

로깅 간단히 알아보기  (0) 2021.05.03
Spring MVC  (0) 2021.05.01
Handler Mapping & Handler Adapter  (0) 2021.04.30
Spring MVC 전체 구조  (0) 2021.04.30
유연한 컨트롤러  (0) 2021.04.28