<!DOCTYPE HTML>
<html>
<head>
<title>static content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>
MVC : Model, View, Controller
옛날에는 view에 모든 프로그래밍을 설계한 model1 방식이지만 지금은 MVC와 같은 model2 방식으로 개발한다.
분야를 분리하여 유지, 보수에 더 용이하게 하기 위함이다.
-> view는 프론트(보이는 것), model과 controller는 백(내부)
thymeleaf의 장점 : 서버 구동 없이 html을 주소창에 입력하면 바로 볼 수 있다.(view 영역)
controller 파일의 hellocontroller 파일에 다음을 추가한다.
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model){
model.addAttribute("name",name);
return "hello-template";
}
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
이때 이 템플릿은 서버 구동 없이 확인가능
copy path - absolute path 로 주소창을 붙여넣기
여기서 loalhost:8080/hello-mvc로 접속하면 에러페이지가 뜬다.
이유는 name을 받아오는데 required 값이 기본적으로 true로 설정되어 있어서 주소창에 추가로 ?name=spring!을 넣어주어야한다.
MVC, 템플릿 엔진 작동 구조
@GetMapping("hello-spring")
@ResponseBody // http 의 body 부분에 아래 데이터를 직접 넣겠다는 의미, ※ html의 body 아님
public String helloString(@RequestParam("name") String name){
return "hello "+name;
view 없이 바로 변환된 값이 전송된다.
결과는 MVC, 템플릿 방식과 같지만 소스 부분이 다르다.
MVC, 템플릿 방식 소스
API 방식 소스
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name){
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
=> @ResponseBody를 사용하고 객체를 반환하면 json형식으로 반환하게 된다.
※ 기본 객체처리 라이브러리 : MappingJackson2HttpMessageConverter