스프링 부트는 정적 컨텐츠 기능을 자동으로 제공한다.
https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-static-content
내장 톰켓 서버에서 요청을 받고, 컨트롤러에서 hello-static 컨트롤러가 있는지 확인함.
컨트롤러가 우선순위를 가진다는 의미!
없으면, 내부에 있는 static/hello-static.html을 찾음. 있으면 이를 반환해줌!
MVC : Model, View, Controller
controller/HelloController
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
resources/templates/hello-template.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
"hello! empty"는 서버 없이 그냥 html을 볼 때 보이는 문구이다. 없어도 된다.
url에 name=spring을 줬기 때문에 hello empty가 아닌 hello spring이 나온것이다
웹 브라우저에서 localhost:8080/hello-mvc를 넘기면 스프링 부트를 띄울 때 같이 띄우는 내장 톰켓 서버를 먼저 거침.
스프링은 helloController에 매핑 되어있는 것을 확인하고, 해당 메서드를 호출해주고, return해줄때 이름을 hello-template으로 model에는 name이 spring 값을 스프링한테 넘겨주면 viewResolver가 templates/hello-template.html을 찾아서 템플릿 엔진이 넘겨서 HTML로 변환해줘서 보여준다.
controller/HelloController
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
@ResponseBody를 꼭 넣어줘야 한다!
html에 나오는 Body태그를 의미하는 것이 아닌 HTTP에서 통신 프로토콜의 Body 부분에 내용을 직접 넣어주겠다는 의미이다.
데이터를 그대로 보여주는 방식이다. html 사용X
controller/HelloController
@Controller
public class HelloController {
@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;
}
}
}
문자가 아닌 데이터를 보여주고자 한다면
json 방식이다
alt+insert하면 getter, setter 단축키로 생성할 수 있음
@ResponseBody가 안붙여져 있다면 viewResolver가 동작하지만, 붙여져 있다면, 그리고 객체가 오면! HttpMessageConverter가 동작함. 단순 문자라면 StringConverter동작하고, 객체라면 JsonConverter가 동작함.
@ResponseBody 를 사용
- HTTP의 BODY에 문자 내용을 직접 반환
- viewResolver 대신에 HttpMessageConverter 가 동작
- 기본 문자처리: StringHttpMessageConverter
- 기본 객체처리: MappingJackson2HttpMessageConverter
- byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
인프런 강의 "스프링 입문- 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 강의를 들으면서 복습하는 강의 노트 취지로 작성 중입니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard