MVC와 템플릿 엔진
MVC란? Model,View, Controller의 삼위일체이다.
과거에는컨트롤러랑 view가 따로 분리되어 있지 않았다.
view에서 모든걸 다했음 JSP가지고 이렇게 많이 했는데 이걸 소위 말하는 Model one 방식이라 하고 지금 MVC 스타일로 많이 한다.
왜냐면 view는 화면을 그리는데 모든역량을 집중해야한다. 또한 개발은 자기만의 역량이 닿는 곳에 집중해야 한다.
그리고 Controller와 Model에 관련된 부분들은 뭔가 Business로직에 관련이 있거나 내부적인 것을 처리하는데 집중해야한다.
이제부터 helloController에다가 Controller를 하나 더 만들 예정이다.
이번에는 외부에서 파라미터를 받아서 사용해볼 것이다.
@GetMapping("hello-mvc"){
public String helloMvc(@RequestParam("name") String name, Model model){
model.addAttribute("name",name);
}
}
hello-mvc에서 get Method
외부에서 name으로 받아옴 이 때 "name" <- 키 name <- value
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
위에 작성된 코드로 hello-template.html생성해주었다.
Absolute Path를 통해서 주소를 받아옴.
thymeleaf에 장점은 html을 실제 서버없이 파일을 열어서 볼 수 있다는 것이다.
p태그 사이에 내용을 넣는 이유는 서버 없이 html을 열 때 값을 퍼블리셔 분들이 값을 적어 놓고 볼 수 있으려고 무언갈 적는 것이다.
실제 서버를 타서 돌면 hello + ${name}에 있는 값으로 값이 바뀌게 된다.
서버를 실행 했는데 에러가 발생하였다.
warning이 나왔음 그래서 8080포트를 죽이고 인텔리로 실행했다.
command + p 를 이용해서 파라미터 정보를 확인할 수 있음. 아래를보면 파라미터 정보를 알 수 있는 것을 확인할 수 있다.
@RequestParam("name")
- 이 부분에서 기본으로 required가 true이다.
파라미터로 무언갈 넘겨주니깐 정상적으로 잘 출력되는 모습이다.
name=spring!이걸 브라우저가 받으면 controller에서 name이 spring!이 넘어간다.
그래서 model.addAttribute("name",spring1) 이렇게 바뀌게 됨
그리고 나서 hello-template에 넘어간다.
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
이 코드에서 ${name}이 Spring!으로 바뀐다.
웹 브라우저에서 localhost:8080/hello-mvc 넘기면 스프링부트가 띄울 때 먼저 띄우는 스프링 부트 내장 톰캣서버를 먼저 거친다.
hello-mvc 라는게 왔다고 Spring한테 던진다. helloController에 hello-mvc 메서드에 매핑이 되어있는것을 확인해준 후 메서드를 호출해준다. 이때 model.addAttribute에서 name=spring이 받아져서 "name", spring이 된다
이후 return hello-template을 보고 viewResolver가 화면과 관련된 해결자가 동작을 한다.
-> view를 찾아주고 템플릿 엔진을 연결 시켜준다.