Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

ViewResolver 본문

인프런/[인프런] 스프링 MVC 1

ViewResolver

Seung__ 2021. 9. 12. 01:40

1.OldController - View 조회할 수 있도록 변경


@Component("/springmvc/old-controller") //빈 이름을 url패턴으로.
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 발생함
  • View가 없어서 생긴 문제임. view를 찾지 못함.
  • 위의 경우는 논리명만 넘겨준 상태임.
  • 물리명으로 바꿀 수 있도록 ViewResolver가 필요함.
  • 먼저 물리명에 사용하도록 prefix, subfix등록이 필요
  • application.properties에 아래와 같이 등록.
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

 

2. 뷰 리졸버 - InternalResourceViewResolver


  • 스프링 부트는 InternalResourceViewResolver 라는 뷰 리졸버를 자동으로 등록함.
  • 이때 application.properties 에 등록한 spring.mvc.view.prefix , spring.mvc.view.suffix 설정 정보를 사용해서 등록
  • --> 직접 안해도됨 ㅋㅋ ㄱㅇㄷ~
  • 참고로 권장하지는 않지만 설정 없이 다음과 같이 전체 경로를 주어도 동작하기는 한다.
  • return new ModelAndView("/WEB-INF/views/new-form.jsp");

 

3. 뷰 리졸버 동작 방식.


 

3.1 스프링 부트가 자동으로 등록하는 뷰 리졸버


1 = BeanNameViewResolver : 빈 이름으로 뷰를 찾아서 반환한다. (예: 엑셀 파일 생성 기능에 사용)
2 = InternalResourceViewResolver : JSP를 처리할 수 있는 뷰를 반환한다.

 

3.2 동작 순서


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

 

 

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

'인프런 > [인프런] 스프링 MVC 1' 카테고리의 다른 글

SpringMVC - 콘트롤러 통함  (0) 2021.09.12
Spring MVC  (0) 2021.09.12
Handler 매핑, Handler 어댑터  (0) 2021.09.12
Spring MVC 전체 구조  (0) 2021.09.12
Controller V5 - 2  (0) 2021.09.12
Comments