MVC - 템플릿엔진
: html을 동적으로 바꿔서 내는 것
: 스프링부트 정적 컨텐츠 기능
[ 정적 컨텐츠의 원리 ]
웹 브라우저에서 해당 주소로 들어가면 내장 톰캣 서버가 요청을 받고,
static.html을 스프링부트가 컨트롤러레 static 관련 컨트롤러가 있는지 확인
✅컨트롤러 파일이 없기 때문에 넘어가고,
✅static 관련 html 유/무 확인 후 html 파일 존재할 시, 웹 브라우저에 바로 보내주는 것
: html을 서버에서 동적으로 프로그래밍해서 웹 브라우저로 내려주는 것
템플릿 엔진 사용하기 위해 => MVC (Model, View, Controller) 필요
view = 화면을 그린다.
Model,Controller = 비즈니스 로직 관련 및 내부적인 것 처리
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model){
model.addAttribute("name", name);
return "hello-template";
}
< 원리 >
: name이라는 이름으로 param을 받아, attribute의 key의 이름이 "name"이라는 곳에 param으로 받은 값을 model에 넣어 return
Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'name' for method parameter type String is not present]
🚨Error🚨 ❌🔴
: name에 param 값을 주면서 hello-mvc로 들어가야하며, html에서 GET 방식으로 param을 받을 수 있는 방법은 "?key=value"이므로, 접근 시 필수적으로 적어줘야 한다.
1. name의 param으로 받은 "spring~~"이 model.addAttribute("name",name) 중 두번 째 파라미터로 들어가고, 이 값들이 Model에 담겨 hello-template으로 넘어감
2. template에서 Model의 Key값이 name인 것을 찾아 그 value값을 ${name}에 치환
: JSON 데이터 구조 포멧으로 클라이언트로 데이터를 전달하는 방식
@GetMapping("hello-string")
@ResponseBody // body에 data를 직접 넣어주겠다.(바디 응답부분)
public String helloString(@RequestParam("name") String name){
return "hello"+name; //spring 데이터를 넣을 경우 "hello spring" - 뷰가 없으면 문자 그대로
} // param으로 받은 것을 그대로 요청한 서버에 바로 전달
템플릿 엔진과 다르게 template 없이 값 그대로 내보내준다.
@GetMapping("hello-api") // JSON 방식
@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;
}
}
{key : value}처럼 JSON 형식으로 data가 웹 브라우저에 내려간다.
@ResponseBody
[ 원리 ]
웹 브라우저 접속 시, 내장 톰캣 서버에서 hello-api spring으로 보내줌
spring : hello-api가 mapping되어 있는 것 확인과 동시에 @ResponseBody가 있어 http 응답에 data를 그대로 넘겨주는 동작
✅객체를 넘겨주기 때문에 data 그대로가 아닌 JSON 방식으로 만들어서 http응답에 반환
✅ @ResponseBody 있을 경우, HttpMessageConverter 동작
객체가 return 되기 때문에 JsonConverter가 동작하게 되어
객체를 JSON 형식으로 바꾸게 되고, JSON 형태로 응답 하게 됨.