Controller
장점
- SpringMVC가 효율적인 API처리를 위해 만들어낸 Front Controller 패턴은 개별 Controller의 작업을 단순화 하는 데 도움이 됨.
@Controller
: @Controller annotation이 명시되어 있는 클래스가 Controller의 역할을 수행할 수 있도록 등록해줌
- 해당 annotation을 달았을 때 문자열로 반환을 하게 되면 resourses/templates 쪽에서 html 파일을 찾아 리턴하는 이름을 가진 html 파일이 있는지 없는지 확인해 해당 html을 반환함.
@ResponseBody
- html 파일의 이름이 아닌 순수하게 문자열을 반환하는 경우 @ResponseBody annotation 사용
API 경로가 중복은 될 수 있지만 메서드는 달라야 함!
@Controller
public class HelloController {
@GetMapping("/api/hello")
@ResponseBody
public String hello() {
return "Hello World!!";
}
@GetMapping("/api/get")
@ResponseBody
public String get() {
return "GET Method 요청";
}
@PostMapping("/api/post")
@ResponseBody
public String post() {
return "POST Method 요청";
}
@PutMapping("/api/put")
@ResponseBody
public String put() {
return "PUT Method 요청";
}
@DeleteMapping("/api/delete")
@ResponseBody
public String delete() {
return "DELETE Method 요청";
}
}
@RequestMapping
: 위의 코드의 /api 처럼 중복되는 URI를 단축시키기 위해 사용하는 annotation
정적페이지
- 정적페이지는 이미 완성되어 변화가 일어나지 않기 때문에 굳이 Controller를 거칠 필요 없이 직접 접근
static 폴더에서 반환
- 그럴 필요없지만 만약 Controller를 거쳐 정적페이지에 접근하고 싶다면 build.gradle에서 Thymeleaf 부분을 주석처리하면 됨 (이게 있으면 default경로가 static이 아닌, resource/templates 기 때문)
Redirect 로 반환
- 템플릿 엔진을 적용한 상태에서 static 폴더의 html 파일을 Controller를 통해 처리하고 싶다면 "redirect:/hello.html" 처럼 redirect요청을 문자열로 반환하면 됨.
@GetMapping("/html/redirect")
public String htmlStatic() {
return "redirect:/hello.html";
}
정적인 html을 템플릿에 넣어서 반환
Thymeleaf 엔진을 적용해 templates에 있는 html을 반환할 때 규칙이 정해져있음
- 뒤에 html 빼고 파일 이름만 문자열로 반환
@GetMapping("/html/templates")
public String htmlTemplates() {
return "hello";
}
➡️ Controller 라는 annotation이 달린 클래스에서 html 이름 문자열을 반환해주면 됨.
동적페이지
private static long visitCount = 0;
...
@GetMapping("/html/dynamic")
public String htmlDynamic(Model model) {
visitCount++;
model.addAttribute("visits", visitCount);
return "hello-visit";
}
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Hello Spring</title></head>
<body>
<div>
Hello, Spring 동적 웹 페이지!!
</div>
<div>
(방문자 수: <span th:text="${visits}"></span>)
</div>
</body>
</html>
동적 페이지 처리 과정
- 클라이언트의 요청을 Controller에서 Model로 처리
- DB 조회가 필요하다면 DB 작업 후 처리한 데이터 Model에 저장
- Thymeleaf에게 View, Model 전달
- View에 Model을 적용해 동적인 웹페이지 생성
- 클라이언트에게 View 전달
용어정리
- log
: 기록. 어떠한 정보를 저장하고 표현하는 것 - Thymeleaf
: 템플릿 엔진. 동적 HTML 파일을 만들기 위한 라이브러리- 템플릿 엔진 종류 : Thymeleaf, Groovy, FreeMarker, Jade 등
'내일배움캠프(Sparta) > Spring' 카테고리의 다른 글
[Spring] Jackson / Path Variable / Request Param (1) | 2023.11.02 |
---|---|
[Spring] 데이터를 Client에 반환하는 방법 (0) | 2023.11.02 |
[Spring] Spring MVC / Front Controller (1) | 2023.11.01 |
[Spring] 테스트 코드 / Lombok / application.properties (1) | 2023.11.01 |
[Spring] Gradle / Server / HTTP (1) | 2023.10.31 |