웰컴 페이지 처럼 서버에서 하는 일 없이 파일을 그대로 웹 브라우저에 내려주는 것.
템플릿 엔진: html을 서버에서 동적으로 렌더링. ex) JSP, php
→ Model - View - Controller 라고 함.
API 방식: json이라는 데이터 구조 포맷으로 클라이언트에게 데이터를 전달, 서버끼리의 데이터 전달
파일명.html
→ /파일명.html
)스프링 부트는 기본 설정으로 정적 파일을 resources/static
폴더에서 찾아 그대로 화면에 렌더링
뷰를 찾아 템플릿 엔진을 통해 화면을 렌더링해 html을 웹 브라우저에 넘겨주는 방식
과거에는 Controller와 View가 분리되어 있지 않고, View에서 모든 걸 다 했음.
관심사 분리
→ View는 화면과 관련된 일만
→ Controller는 비즈니스 로직, 뒷단 내부적인 걸 처리
→ Model은 View(화면)에 필요한 것들을 담아 넘겨줌
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
**@RequestParam**
: 단일 파라미터를 전달 받을 때 사용하는 어노테이션
→ @RequestParam("가져올 데이터의 이름") [데이터 타입][가져온 데이터를 담을 변수]
helloMvc
메소드의 인자값으로 @RequestParam()
어노테이션을 넣어 값을 받아온다.cf) url에 값을 안 넘겨주면 400에러가 발생한다 → defaultValue 지정 가능
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam(value = "name", required = false, defaultValue = "Spring") 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>
${name}
부분에서 모델에서 name 값을 꺼내 치환.
웹 브라우저에 html 대신 data를 전달하는 방식
**ResponseBody**
: 메소드에서 리턴되는 값이 View를 html로 렌더링 되지 않고 HTTP Response의 Body부분에 직접 메세지를 넣어줌
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
public static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}