우선 패키지 익스플로러의 구조부터 파악해야 한다. 템플릿에 html파일이 있어야 연결이 가능하다.
package com.codingbox.core3.basic.response.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class ResponseViewController {
/*ModelView
* - 디스패처서블릿에 의해 처리될 뷰를 직접 지정할 수 있고 Model부분에 있는 데이터를 전달 할 수 있도록 한다
* */
@RequestMapping("/response-view-v1")
public ModelAndView responseViewV1() {
ModelAndView mav = new ModelAndView("response/hello").addObject("data","datavalue");
return mav;
//data가 키 값, datavalue가 value. 즉 datavalue가 값으로 출력
}
//@ResponseBody //이걸쓰면 "response/hello"; 이게 나옴. 화면으로 안넘어가지는 것
@RequestMapping("/response-view-v2")
public String responseViewV2(Model model) {
model.addAttribute("data","hello!!!");
return "response/hello";
}
}
<!DOCTYPE html>
<html>
<html xmlns:th="http://www.thymeleaf.org">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hello.html</h1>
<p th:text="${data}">empty</p>
</body>
</html>
주석에 대부분의 내용을 작성해놓아 추가 설명이 크게 필요없지만, 간단히 설명해보면 "/response-view-v1"에 액세스하는 경우 responseViewV1 메서드가 실행되고, "/response-view-v2"에 액세스하는 경우 responseViewV2 메서드가 실행된다. 이 메서드는 "data" 속성을 모델에 "hello!!!" 값으로 추가하고 뷰 이름을 "response/hello"로 반환한다.
✍️양쪽 경우 모두 컨트롤러 메서드에 의해 뷰 이름 "response/hello"이 반환되며, 이것은 Spring MVC에게 해당 이름의 Thymeleaf 템플릿을 찾도록 지시한다.
그런 다음 Thymeleaf에 의해 Thymeleaf 템플릿 "hello.html"이 렌더링된다.
둘은 다른 주소로 매핑된다.
⭐또 하나 주목해야 할 부분은 @ResponseBody 이 어노테이션인데, 이것은 화면이 넘어가지지 않고 글자 그대로를 가져와 버린다. 지금까지는 템플릿을 통한 연결이었다.