정적 (static) 웹 페이지
2. 동적 (dynamic) 웹 페이지
- **Controller**
1. Client 의 요청을 **Model** 로 받아 처리
2. Template engine 에게 **View**, **Model** 전달
1. **View**: 동적 HTML 파일
2. **Model**: View 에 적용할 정보들
3. Template engine
1. **View** 에 **Model** 을 적용 → 동적 웹페이지 생성
1. 예) 로그인 성공 시, "로그인된 사용자의 id" 를 페이지에 추가
2. Template engine 종류: 타임리프 (Thymeleaf), Groovy, FreeMarker, Jade 등 (스프링에서 JSP 이용은 추천하지 않고 있음)
4. Client 에게 **View** (동적 웹 페이지, HTML) 를 내려줌
26) Controller 와 HTTP Request 메시지
Client 와 Server 간 Request, Response 는 HTTP 메시지 규약을 따름
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
@RestController
@RequestMapping("/hello/rest")
public class HelloRestController {
@GetMapping("/json/string")
public String helloHtmlString() {
return "<html><body>Hello @ResponseBody</body></html>";
}
@GetMapping("/json/list")
public List<String> helloJson() {
List<String> words = Arrays.asList("Hello", "Controller", "And", "JSON");
return words;
}
}
1. Client → DispatcherServlet
1. 가장 앞 단에서 요청을 받아 FrontController 라고도 불림
2. DispatcherServlet → Controller
- API 를 처리해 줄 Controller 를 찾아 요청을 전달
- Handler mapping 에는 API path 와 Controller 함수가 매칭되어 있음
<aside>
💡 [Sample]
**GET /hello/html/dynamic** → `HomeController` 의 **helloHtmlFile() 함수**
**GET /user/login** → `UserController` 의 **login() 함수**
**GET /user/signup** → `UserController` 의 **signup() 함수**
**POST /user/signup** → `UserController` 의 **registerUser() 함수**
</aside>
- 함수 이름을 내 마음대로 설정 가능했던 이유!!
- Controller 에서 요청하는 Request 의 정보 ('**Model**') 전달
```java
@Controller
public class ItemSearchController {
@GetMapping("/api/search")
@ResponseBody
public List<ItemDto> getItems(**@RequestParam String query**) {
// ...
}
}
```
1. **Controller** → DispathcerServlet
1. Controller 가 Client 으로 받은 API 요청을 처리
2. '**Model' 정보**와 '**View' 정보**를 DispatcherServlet 으로 전달
2. DispatcherServlet → Client
1. ViewResolver 통해 View 에 Model 을 적용
2. View 를 Client 에게 응답으로 전달