출처| https://nosleep.tistory.com/25

Controller에 요청을 전달하고 결과값을 View에 전달한다.
클라이언트의 모든 Request를 받아 제어한다.
메서드를 탐색한다.Controller의 처리 후, View에 해당하는 View Name을 저장하여 반환한다.
Controller에서 처리 후, View에 전달할 객체를 저장하는 곳.
포조에선 req
package com.example.demo.mvc;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
public class ViewResolver {
Logger logger = Logger.getLogger(ViewResolver.class);
public ViewResolver() {}
public ViewResolver(String[] pageMove) {}
public ViewResolver(HttpServletRequest req, HttpServletResponse res, String[] pageMove)
throws ServletException, IOException
{
String path = pageMove[1];
if("redirect".equals(pageMove[0])) {
res.sendRedirect(path);
}else if("forward".equals(pageMove[0])) {
RequestDispatcher view = req.getRequestDispatcher("/"+path+".jsp");
view.forward(req, res);
}else {
logger.info("else");
path = pageMove[0]+"/"+pageMove[1];
RequestDispatcher view = req.getRequestDispatcher("/WEB-INF/views/"+path+".jsp");
view.forward(req, res);
}
}
}
@RestController : @Controller + @ResponseBody
왜 스프링은 InternalResourceViewResolver.java 클래스를 추가했나?
ViewResolver가 하는 역할은 application.yml 파일에서
[ application.yml]
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
이 부분이다
ex: index.jsp
[InternalResourceViewResolver]
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
//implementation 'org.springframework.boot:spring-boot-starter-web' - 스타터
InternalResourceViewResolver bean = new InternalResourceViewResolver();
//bean.setViewClass(JstlView.class);
bean.setPrefix("/WEB-INF/jsp/");///WEB-INF/jsp/home/index
bean.setSuffix(".jsp");///WEB-INF/jsp/home/index.jsp
registry.viewResolver(bean);
이 말은 WEBINF에서 FRONT 쪽을 찾을 때 사용한다.
[webapp]
redirect + forward를 붙이게 된다면, webapp쪽에서 사용한다.
redirect:./index.jsp
forward:./index.jsp
출처| https://ande226.tistory.com/101



ModelAndView : 데이터를 전송시킬 수 있는 리턴 타입 (cf. String 타입은 단순하게 페이지만 열어주는 역할을 함)
setViewName : 어떤 페이지를 보여줄 것인지
addObject : key와 value를 담아 보낼 수 있는 메서드
둘다 설정가능하다는게 큰 메리트
① Controller 처리 결과 후 응답할 view와 view에 전달할 값을 저장
② 생성자
ModelAndView(String viewName) : 응답할 view 설정
ModelAndView(String viewName, Map values) : 응답할 view와 view로 전달할값들을 저장 한 Map 객체
ModelAndView(String viewName, String name, Object value) : 응답할 view이름,view로 넘길 객체의 name-value
③ 주요 메소드
setViewName(String view) : 응답할 view이름을 설정
addObject(String name, Object value) : view에 전달할 값을 설정· requestScope에 설정됨
addAllObject(Map values) : view에 전달할 값을 Map에 name-value로 저장하여한번에 설정· requestScope에 설정됨
① Controller는 ModelAndview 객체에 응답할 view이름을 넣어 리턴
② DispachServlet은 ViewResolver에게 응답할 view를 요청한다
③ ViewResolver는 View 이름을 이용해 알맞은 view 객체를 찾아DispatcherServlet에게 전달