컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버(viewResolver)가 화면을 찾아서 처리한다.
- 스프링 부트 템플릿 엔진은 기본적으로 viewName 매핑이 된다.
- `resources:templates/` + {ViewName} + `.html`
위 그림을 볼 때, 웹 브라우저에서 'localhost:8080/hello'라고 해서 던지면,
스프링 부트는 톰캣이라는 웹 서버를 내장하고 있다. 톰캣에서 이것을 받아서 "어, /hello네" 하고 스프링에게 물어본다.
스프링의 helloController를 보면 @GetMapping("hello")라는 것이 있다.
package hello.hellospring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "hello!!");
return "hello";
}
}
여기서 Get은 get, post 메소드의 그 get이다. 그러면 /hello의 URL에 매칭이 된 것이다.
그러면 이 컨트롤러에 있는 이 메소드가 실행이 된다. 실행이 되면서 model이라는 것이 넘어온다. Spring이 model이라는 것을 만들고, 이 모델에다가 addAttribute를 해서 key, value 값을 넣어주는 것이다. 여기서 key는 'data', value는 'hello!!'이다. model(data:hello!!)의 방식으로 값을 넣어둔 것이다.
그리고 리턴(return)의 이름이 'hello'이다. 이 이름이 resources:templates/hello.html의 'hello'와 동일하다.
즉, 이 'hello'라는 이름을 가진 html 파일을 Spring이 찾아서 Thymeleaf 템플릿 엔진이 처리(렌더링)를 해주는 것이다.
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님!</p>
</body>
</html>
templates/hello.html의 ${data}의 'data'는 아까 컨트롤러에서 만든 model의 key 값이다. 그 key의 value를 받았기 때문에, 화면에 아래와 같이 출력된다.
value값을 바꾸면 바뀐 채로 출력된다. 가령, model의 addAttribute에서 attributeValue를 "spring~~"으로 변경하면,
이렇게 바뀌어서 렌더링 된다.
'Framework > Spring' 카테고리의 다른 글
API (0) | 2022.11.29 |
---|---|
MVC와 템플릿 엔진 (0) | 2022.11.29 |
정적 컨텐츠 (Static Content) (0) | 2022.11.29 |