스프링으로 웹 개발을 하는 방법에는 크게 세 가지가 있다. 그 방법은 아래와 같다.
1. 정적컨텐츠
http request로 localhost:8080/hi.html을 요청하였는데, 컨트롤러에서 해당 액션메소드를 찾을 수 없다면,
resources/static/hi.html를 찾는다.
2. MVC와 템플릿 엔진
Model, View, Controller를 이용하는 방법이다.
컨트롤러의 액션메소드에서 view의 이름을 return하면, 해당 이름의 view 파일이 호출된다.
컨트롤러)
@Controller
public class HiController {
@GetMapping("hi")
public String hi(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hi";
}
}
View) resources/templates/hi.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hi ' + ${name}">hi! visitors</p>
</body></html>
만약 위 컨트롤러의 액션메소드 파라미터의 name에 "고양이"가 들어온다면, hi.html의 ${name}에 "고양이"가 전달되고, view에 hi 고양이가 나온다.
3. API
1)
@Controller
public class HiController {
@GetMapping("hi")
@ResponseBody
public String hiString(@RequestParam("name") String name) {
return "hi " + name;
}
}
@ResponseBody 어노테이션
이 어노테이션을 붙이면 일반적인 Controller의 return메소드와 다르게 view의 주소를 return하지 않는다( ViewResolver를 사용하지 않는다).
따라서 return문을 그대로 출력한다(html 형식으로 쓸 필요가 없다).
위 코드에서, 만약 request parameter에 name에 "곰돌이"가 들어오면, "hi 곰돌이 "가 그대로 return된다.
2)
@Controller
public class HiController {
@GetMapping("hi")
@ResponseBody
public Hi hiApi(@RequestParam("name") String name) {
Hi hi = new Hi();
hi.setName(name);
return hi;
}
static class Hi {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
@ResponseBody를 사용하고, 객체를 반환하면, JSON 형식으로 변환된다.
'Back-end > spring frameworks' 카테고리의 다른 글
| 컴포넌트 스캔 (0) | 2023.11.19 |
|---|---|
| 싱글톤 (0) | 2023.11.19 |
| 스프링 컨테이너와 빈 (0) | 2023.11.19 |
| 좋은 객체 지향 설계의 5가지 원칙(SOLID) (0) | 2023.11.19 |
| @AfterEach, 어노테이션, MVC패턴의 호출 경로 (0) | 2023.09.26 |