1.MVC란?
-model view controller
Controller는 원래 view의 일부였는데, 너무 내용이 복잡해서 둘로 쪼갰다.
view == 화면을 그리는 데 집중하는 part
model, Controller == 비즈니스 로직이나 요청 내용 처리에 집중하는 part
2. 코드 분석
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data","hello!!");
return "hello";
}
// hello-mvc 조회(GET)에 대비한 mapping을 추가
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model)
{
model.addAttribute("name", name);
return "hello-template";
}
//GetMapping("hello-mvc") == /hello-mvc로 조회 요청 들어오면 밑의 public 함수로 처리해라
//@RequestParam("name") == name이라는 key값 안에 특정 값을 받아오겠다.
//string name인 걸로 보아 string 값
//Model model -> public 함수의 내용물
//model.addAttribute("name", name); name이라는 key값의 value는 parameter로 데려오는 값이다.
//return "hello-template"; == resource에 hello-template라는 html문서를 실행시켜라.
//hello-template html 문서
<html xmlns:th = "http://www.thymeleaf.org">
<body>
<p th:text="'hello '+${name}">hello! empty</p>
</body>
</html>
<!-- 3행 -> 타임리프 엔진을 이용하겠다.-->
<!-- 5행의 hello empty는 없어도 된다. 다만 서버를 이용하지 않고,바로 html 문서를 열 때-->
<!--대신 출력 되는 내용이다.-->
<!-- 5행의 +${name}은 모델의 키 값인 name의 value를 꺼내 쓰겠다는 뜻이다.-->
해당 내용 바로 Run 하면 에러가 뜸.
Why?
파라미터인 name에게 값을 주지 않았기 때문에(스프링 부트에선 파라미터에 값이 있는데 default다.)
따라서 값을 넣어줘야 한다.
localhost:8080/hello-mvc?name=spring! ( ?파라미터이름=값)은 해당 파라미터에 값을 넣어주는 것이다.
이렇게 되면 모델의 key값인 name의 value로 spring!이 들어간다.
3.작동원리
1) Localhost:8080/hello-mvc로 get 요청이 들어옴
2) tomcat에서 해당 요청 받아서 스프링부트로 넘겨줌. 스프링부트는 해당 요청에 mapping 되는 컨트롤러 있는지 확인. helloController 안에 해당 요청과 mapping이 되는 @getmapping(“hello-mvc”)가 있음을 확인하고 해당 컨트롤러가 일 처리하도록 맡김.
(@getmapping(“hello-mvc”) == url/hello-mvc란 주소로 get 요청이 들어왔다면 밑의 함수로 일 처리해라.)
3) hello-template.html이라는 값을 resource 안에서 찾아서 반환하라. 이때 model을 참조하는 값은 확인해서 처리해라 (여기서 ${name} = spring! 으로 치환)
4) viewResolver: view 처리하는 녀석 -> 해당 html을 주어진 파라미터 값(name의 value는 spring!)에 맞게 변환 후 웹 브라우저에 띄움.
4. 외운 거 확인
(1) 코드 분석 보고 스스로 답하기
(2)작동원리 그림만 보고 답하기
'백엔드 개발 > SpringMVC' 카테고리의 다른 글
Web 애플리케이션 계층 구조 (0) | 2022.11.29 |
---|---|
Spring 웹 개발 기초 - API (0) | 2022.11.29 |
Spring Web 개발 기초 - 정적 컨텐츠 작동원리 (0) | 2022.11.29 |
윈도우 명령 프롬프트에서 jar 파일 Build 하는 법 (0) | 2022.11.29 |
Spring Boot - 동작하는 페이지 만들기 (0) | 2022.11.28 |