MVC와 템플릿 엔진
MVC : Model, View, Controller
과거에는 View 와 Controller 가 분리되어있지 않았음.
View에 Controller가 포함. - model1방식
지금은 MVC 스타일.
View : 화면을 그리는 데에 모든 역량을 집중해야 함.
Controller, Model 관련 부분들은 비지니스 로직과 관련 있거나 내부적인 것 처리에 집중 해야 함.
View는 화면에 관련된 일만,
비지니스 로직, 서버 와 관련된 것들은 Controller, 뒷단 비지니스 로직이 처리하고
Model에 화면에 필요한 것들을 담아 화면 쪽에 넘겨줌
외부에서 파라미터를 받는 좀 더 복잡한 컨트롤러
java/hello/hellospring/controller/HelloController.java 에 추가
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
템플릿 엔진으로 동작하면 hello! empty가 text "'hello ' + ${name}"로 치환
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
cf) thymeleaf 템플릿의 장점
html 파일을 서버 없이 열어서 확인 가능. path로 열기
서버없이 html 파일을 볼 때 hello! empty 가 보여짐
localhost:8080/hello-mvc 접속 시 에러 남.
Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'name' for method parameter type String is not present]
Parameter Info 단축키 command + p
@RequestParam option 중 required default 값이 true. 기본으로 값을 넘겨야 함.
localhost:8080/hello-mvc?name=spring! 으로 넘겨주면 화면이 뜸
@RequestParam value를 spring!!!!!! 으로 바꿔 호출
동작 방식
localhost:8080/hello-mvc?name=spring! 에서 name=spring! 으로 넘겨주면
Controller에서 name이 spring!으로 바뀜. 그 후 model에 담김
Controller
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
그 후 template ( hello-template.html ) 으로 넘어가면 model의 key값이 name인 것의 value를 꺼내 치환해줌
hello spring!이 출력됨
${xxx} : model에서 값을 꺼내는 것
웹브라우저에서 localhost:8080/hello-mvc 를 넘기면 스프링 부트 실행 시 함께 실행되는 내장 톰켓 서버를 거침
내장 톰켓 서버는 hello-mvc 가 왔음을 스프링에게 던짐
스프링은 Controller의 method 에 mapping 되어 있는지 확인해 method를 호출.
return 시 이름을 template 이름, model에는 key: name, value: spring! 넘어옴
return, model 을 스프링의 viewResolver (화면 관련. view를 찾아주고 template에 연결 시켜줌) 에 넘겨줌
viewResolver 가 return의 name과 같은 templates/hello-template.html 를 찾아 Thymeleaf 템플릿 엔진에게 처리해달라 넘김
템플릿 엔진이 렌더링 해 변환한 HTML을 웹 브라우저에 반환.
(정적 페이지 일 때는 변환하지 않았음. 그대로 반환. 템플릿 엔진의 경우 변환해 반환)
소스 보기 시 전달된 name이 변환되어 넘어간 것을 볼 수 있다.
'Spring_inflearn > 입문' 카테고리의 다른 글
[Spring] inflearn 스프링 입문 - 회원 관리 예제 - 백엔드 개발 1 (0) | 2022.09.09 |
---|---|
[Spring] inflearn 스프링 입문 - 스프링 웹 개발 기초 3 (0) | 2022.09.07 |
[Spring] inflearn 스프링 입문 - 스프링 웹 개발 기초 1 (0) | 2022.09.02 |
[Spring] inflearn 스프링 입문 - 프로젝트 환경설정 4 (0) | 2022.08.28 |
[Spring] inflearn 스프링 입문 - 프로젝트 환경설정 3 (0) | 2022.08.24 |
댓글