[Spring Boot #16] 스프링 웹 MVC : Thymeleaf 템플릿
| Thymeleaf란?
- Thymeleaf는 스프링 부트가 자동 설정을 지원하는 웹 템플릿 엔진입니다. HTML문서에 HTML5 문법으로 서버쪽 로직을 수행하고 적용시킬 수 있습니다.
- HTML 디자인에 전혀 영향을 미치지 않고 웹 템플릿 엔진을 통해 HTML을 생성할 수 있습니다.
- 독자적으로 HTML을 생성하기 때문에 테스트 시 렌더링 결과를 확인하기 좋습니다.
| Thymeleaf 스프링 부트에서 사용하기
프로젝트 구조
+---src
| +---main
| | +---java
| | | \---com
| | | \---tutorial
| | | \---sptringbootmvc
| | | SampleController.java
| | | SpringBootMvcApplication.java
| | |
| | \---resources
| | | application.properties
| | |
| | +---static
| | \---templates
| | hello.html
| |
| \---test
| \---java
| \---com
| \---tutorial
| \---sptringbootmvc
| \---user
| SampleControllerTest.java
테스트 코드
@RunWith(SpringRunner.class)
@WebMvcTest(SampleController.class)
public class SampleControllerTest {
@Autowired
MockMvc mockMvc;
@Test
public void hello() throws Exception {
/*
* 요청 "/hello"
* 응답
* 모델 name : saelobi
* 뷰 이름 : hello
* */
mockMvc.perform(get("/hello"))
.andExpect(status().isOk())
.andDo(print())
.andExpect(view().name("hello"))
.andExpect(model().attribute("name", is("saelobi")))
.andExpect(content().string(containsString("saelobi")));
}
}
- 위 테스트 코드는 view, model, 그리고 Thymeleaf 템플릿에서 만들어진 HTML 컨텐츠 문서를 확인하는 테스트입니다.
- 요청을 /hello 보냈을 때 뷰와 모델 네임이 각각 hello, saelobi를 반환하는 것을 체크하는 테스트입니다.
소스 코드
@SpringBootApplication
public class SpringBootMvcApplication {
public static void main(String[] args) {
SpringApplication.run(SptringBootMvcApplication.class, args);
}
}
@Controller
public class SampleController {
@GetMapping("/hello")
public String hello(Model model){
model.addAttribute("name", "saelobi");
return "hello";
}
}
- Model 객체에 속성값 name: saelobi를 추가한 후 반환합니다.
- 이 Model 객체에 포함된 값을 통해 Thymeleaf 템플릿 엔진이 해당 템플릿에서 명시한 값을 변환합니다.
hello.html
1 2 3 4 5 6 7 8 9 10 | <!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> | cs |
- xmlns:th="http://www.thymeleaf.org" 를 명시해야 템플릿이 제대로 렌더링됩니다.
- th:text="${name}"에서 Model에서 넘어온 값을 변환합니다.
'Spring Framework > Spring boot #2' 카테고리의 다른 글
[Spring Boot #20] 스프링 부트 CORS (0) | 2021.03.24 |
---|---|
[Spring Boot #19] 스프링 부트 Spring HATEOAS (0) | 2021.03.24 |
[Spring Boot #18] 스프링 부트 ExceptionHandler (0) | 2021.03.24 |
[Spring Boot #17] 스프링 부트 HtmlUnit 써보기 (0) | 2021.03.15 |
[Spring Boot #15] 스프링 웹 MVC : 인덱스 페이지와 파비콘 (0) | 2021.03.15 |
[Spring Boot #14] 스프링 웹 MVC : 정적 리소스 지원 (0) | 2021.03.15 |
[Spring Boot #13] 스프링 웹 MVC : HttpMessageConverter, ViewResolver (0) | 2021.03.15 |
[Spring Boot #12] 스프링부트에서 테스트 작성하기( Spring Boot Test ) (0) | 2021.03.15 |