파일 그대로 렌더링 --> static
서버 실행 후 localhost://8080/index.html 로 접근가능
Model / View / Controller 의 앞글자를 딴 약자로 전에는 view와 controller가 합쳐져있었다고한다. 이 방식이 비효율적이라 나눴고 그게 바로 MVC!!
Django의 MVT 패턴
과 이름만 다를뿐 로직이 똑같아서 이해하는데 어려움은 없었다
Spring에서 Controller
는 Django의 url+view
와 같은 역할을 한다.
1. @GetMapping()으로 url 이름을 설정해준다
2. 전달할 parameter를 지정해준다. @RequestParam은 url에서 ?
를 통해 parameter 값을 넣어주어야 한다.
3. return 값으로는 resource/templatesd 밑에 있는 mapping할 파일 이름을 넣어준다.
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "hello!!");
return "hello";
}
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam(value = "name", required = false) String name, Model model) {
model.addAttribute("name",name);
return "hello-template";
}
}
페이지를 렌더링해서 해주기 vs API 방식으로 데이터를 전달하기
@ResponseBody
: 데이터를 그대로 보내주는 애노테이션
-> @ResponseBody가 안붙어있으면 template(viewResolve)에 던져준다
-> @ResponseBody가 붙어있으면 HTTP Response의 body 부분에 return값(데이터 그 자체)을 던져준다.
스프링은 객체를 넘길 시 default로 JSON 포맷
을 넘겨준다.
@Controller
public class HelloController {
// 1. 데이터를 넘기면 데이터 그대로 전달(여기선 string)
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return name;
}
// 2. 객체를 넘기면 JSON 포맷으로 전달
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
}
당연한 얘기지만 API는 데이터를 넘기기 때문에 resource/templates에 mapping할 파일이 있을 필요가 없다.