Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 김영한
- kotlin
- springdatajpa
- SpringBoot
- Greedy
- spring
- http
- QueryDSL
- transaction
- 스프링 핵심 기능
- java
- 알고리즘
- 백준
- JDBC
- 그리디
- 인프런
- Exception
- Thymeleaf
- Proxy
- Spring Boot
- 스프링 핵심 원리
- Android
- JPQL
- jpa
- pointcut
- 자바
- 스프링
- db
- AOP
- Servlet
Archives
- Today
- Total
개발자되기 프로젝트
ViewResolver 본문
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