1. View 처리방식
응답을 단순 text, JSON 정보로 보내는 것이 아니라 View로 보내는 방법을 배운다. MVC 패턴의 마지막 단계라고 할 수 있다. 스프링부트에서 View를 처리하는 방식은 Controller의 viewPath를 기반으로 static, 또는 동적인 templates의 html 파일을 반환하는 방식이다.
resources 경로 내부에 '/static', '/public', '/resources', '/META-INF/resources' 디렉토리가 있으면 그 디렉토리 내부의 view 파일들을 참조하는 방식으로 작동한다. 여기서 static 디렉토리에는 정적 리소스 정보를, templates 폴더에는 동적 HTML 정보를 넣어주는 것이 일반적이다.
2. 응답 처리 - 정적 리소스, 뷰 템플릿
이전 ServletController(Handler)에서 ModeView 객체를 받아와서 처리했던 것처럼, SpringMVC에서는 ModelAndView 객체를 받아와서 처리한다. 그리고 .addObject() 메서드를 통해 데이터를 담아줄 수 있다.
ModelAndView 객체에 담긴 데이터를 View(.html)파일에서 타임리프 문법을 통해 렌더링한다. HTML 컨텐츠인 "블라블라" 라는 문자열을 'data'라는 이름으로 바인딩된 객체가 치환하게 된다. 타임리프 문법에 대해서는 springMVC-2편에서 배우게 된다.
ModelAndView 반환
java/hello/springmvc/basic/response/ResponseViewController.java
1
2
3
4
5
6
7
8
9
|
@Controller
public class ResponseViewController {
@RequestMapping("response-view-v1")
public ModelAndView responseViewV1() {
ModelAndView mav = new ModelAndView("response/hello")
.addObject("data", "hello!");
return mav;
}
}
|
cs |
resources/templates/response/hello.html
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<p th:text="${data}">블라블라</p>
</body>
</html>
|
cs |
String 반환
model을 파라미터로 받아와서 data값을 넣어주고, viewPath를 String으로 반환한다. 앞선 글에서 배웠듯이, 이렇게하면 String으로 지정된 viewPath로 forward가 된다.
java/hello/springmvc/basic/response/ResponseViewController.java
1
2
3
4
5
|
@RequestMapping("response-view-v2")
public String responseViewV2(Model model) {
model.addAttribute("data", "hello!");
return "response/hello";
}
|
cs |
Thymeleaf 스프링부트 설정
String을 반환하여 viewPath를 받는 경우, View 파일의 절대경로로 이동하기 위해 viewPath의 앞과 뒤에 prefix와 suffix가 붙는다고 배웠다. 이런 처리를 해주는 것은 build.gradle에 'org.springframework.boot:spring-boot-starter-thymeleaf' 라이브러리가 추가되어 있어서, 처리를 위한 ThymeleafViewResolver와 필요한 스프링 빈들을 자동으로 등록해주기 때문이다. 설정을 변경하고 싶다면 application.properties에서 'spring.thymeleaf.prefix=classpath:/templates/' 와 'spring.thymeleaf.suffix=.html' 설정을 바꿔주면 된다.
참조
1. 인프런_스프링 MVC 1편 - 백엔드 웹개발 핵심 기술_김영한 님 강의
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1
'Programming-[Backend] > Spring' 카테고리의 다른 글
[스프링 웹MVC] 14. 웹페이지 실습 ; PRG 패턴, RedirectAttributes (0) | 2021.08.14 |
---|---|
[스프링 웹MVC] 13. 스프링 MVC - HTTP 메시지 컨버터, 요청 매핑 핸들러 어댑터 구조 (0) | 2021.08.14 |
[스프링 웹MVC] 11. 스프링 MVC - 요청 정보 처리 기능 (0) | 2021.08.08 |
[스프링 웹MVC] 10. 스프링 MVC - 요청 매핑 (0) | 2021.08.08 |
[스프링 웹MVC] 9. 스프링 MVC - 프로젝트 생성과 로깅 (0) | 2021.08.02 |