스프링 웹 개발에는 세가지가 있다.
정적 컨텐츠는 말 그대로 그냥 파일을 때려박는다는 뜻..
이런 애들이다. 그냥 고정된 웹페이지들
mvc: model, view, controller
컨트롤러
@Controller
public class 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>
</html>
위 화면에서 파라미터로 넘겨준 것에 주의.
컨트롤러에서 파라미터로 받도록 작성했기 때문.
@GetMapping("hello-string")
@ResponseBody //http의 body에 이 데이터를 내가 직접 넣어줄게
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
실행해보면 그냥 넣어준 값이 냅다 화면에 나타난다.
화면에 있는 뭔가를 조작하는게 아니라 그냥 때려박는 느낌?
@GetMapping("hello-string")
@ResponseBody //http의 body에 이 데이터를 내가 직접 넣어줄게
public String helloString(@RequestParam("name") String name) {
return "<html>hello " + name+"</html>";
}
화면조작으로 하려면 이런식으로 해야하는데..굳이 이렇게할 이유가 없음.
@GetMapping("hello-string")
@ResponseBody //http의 body에 이 데이터를 내가 직접 넣어줄게
public String helloString(@RequestParam("name") String name) {
return "<html>hello " + name+"</html>";
}
@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;
}
}
Hello 라는 객체를 만들어서 써먹어 보자.
비로소 평소에 아는 api같이 생긴게 나온다.
문자열이 아닌 객체가 반환이되면, 디폴트가 json방식으로 반환하는게 기본 정책이다.
동작방식은 위와 같다. 템플릿 엔진과의 가장 큰 차이점이 @ResponseBody
의 존재인데 얘를 눈여겨 보자.
@ResponseBody
를 사용하면...