on
스프링 부트 활용 : 스프링 웹 MVC 7부
스프링 부트 활용
템플릿 엔진이란?
동적 컨텐츠를 생성하는 방법이다.
view만 만드는데 사용하는 것이 아니다. 여러 가지 용도(code generation, email 등)로 사용할 수 있지만, 주로 사용하는 기능이 view를 만드는 것이다.
기본적인 템플릿은 같은데 거기 들어가는 값들만 경우에 따라 달라진다. 그래서 정적인 컨텐츠를 생성할 수 없고, 동적으로 컨텐츠를 생성해서 제공해줘야한다.
Thymeleaf
스프링 부트가 자동 설정을 지원하는 템플릿 엔진이 4 가지 있다.
FreeMarker Groovy Thymeleaf Mustache
💡 스프링부트는 JSP를 권장하지 않는데, JAR패키징을 할 수없고(WAR 패키징) 의존성 문제도 발생할 수 있기 때문이다.
Thymeleaf는 비교적 최근에 만들어진 템플릿 엔진이다.
Thymeleaf를 사용하기 위해 pom.xml에 아래의 의존성을 추가해줘야한다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
기본적으로 자동 설정이 적용되고, 모든 동적으로 생성되는 view들은 src - main - resources - templates 에서 찾게된다.
예시
요청을 “/hello”로 받고, 응답을 만드는 데 사용하는 모델은 name에 grace라는 값이 들어있고, 응답의 view 이름이 hello인 Test를 하나 만든다.
@RunWith(SpringRunner.class)
@WebMvcTest(SampleController.class)
public class SampleControllerTest {
@Autowired
MockMvc mockMvc;
@Test
public void hello() throws Exception {
mockMvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(view().name("hello"))
.andExpect(model().attribute("name", is("grace")));
}
}
Test를 보면 /hello 라는 요청을 받아와야하므로, SampleController에 @GetMapping으로 /hello를 받게 만들어준다.
@Controller
public class SampleController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("name", "grace");
return "hello";
}
}
SampleController의 어노테이션이 @RestController가 아닌 @Controller이기 때문에, public String hello의 리턴 값은 본문을 나타내지 않는다.
public String hello 자체는 view를 의미한다.
view에다 전달할 데이터는 Model에 담아줘서 전달해줄 수 있다.
이제 template을 만들어준다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
</html>
기본 템플릿 hello.html을 만들고 테스트를 실행해보면 통과되는 것을 볼 수 있다.
thymeleaf 문법을 사용하기 위해 xmlns:th="http://www.thymeleaf.org"
를 추가해준다.
그리고 값을 넘겨 받아서 출력되는지 확인하자.
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 th:text="${name}">Name</h1>
</body>
</html>
값이 출력되는 것을 확인할 수 있다.
Reference
Comments
SPRING BOOT 의 다른 글
-
스프링 부트 활용 : 스프링 데이터 4부 17 Sep 2021
-
스프링 부트 활용 : 스프링 데이터 3부 16 Sep 2021
-
스프링 부트 활용 : 스프링 데이터 2부 15 Sep 2021
-
스프링 부트 활용 : 스프링 데이터 1부 14 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 11부 13 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 10부 10 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 9부 09 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 8부 08 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 7부 03 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 6부 05 Aug 2021
-
스프링 부트 활용 : 스프링 웹 MVC 5부 27 Jun 2021
-
스프링 부트 활용 : 스프링 웹 MVC 4부 13 Jun 2021
-
스프링 부트 활용 : 스프링 웹 MVC 3부 06 Jun 2021
-
스프링 부트 활용 : 스프링 웹 MVC 2부 05 Jun 2021
-
스프링 부트 활용 : 스프링 웹 MVC 1부 30 May 2021
-
스프링 부트 활용 : Spring-Boot-Devtools 30 May 2021
-
스프링 부트 활용 : 테스트 26 May 2021
-
스프링 부트 활용 : 로깅 2부 25 May 2021
-
스프링 부트 활용 : 로깅 1부 23 May 2021
-
스프링 부트 활용 : 프로파일 23 May 2021
-
스프링 부트 활용 : 외부 설정 2부 21 May 2021
-
스프링 부트 활용 : 외부 설정 1부 15 May 2021
-
스프링 부트 활용 : SpringApplication 11 May 2021
-
스프링 부트 원리 : 정리 06 May 2021
-
스프링 부트 원리 : 독립적으로 실행 가능한 JAR 06 May 2021
-
스프링 부트 원리 : 내장 웹 서버 04 May 2021
-
스프링 부트 원리 : 자동 설정 02 May 2021
-
스프링 부트 원리 : 의존성 01 May 2021
-
스프링 부트 시작하기 01 May 2021