Template Engine
- 주로 View를 만드는데 사용
- 그 외 Code Generation / Email Template 등에 사용
- 사용 이유 : 서버 처리 후, 템플릿에 동적으로 값을 삽입
- 스프링 부트가 자동 설정 지원하는 엔진
- Thymeleaf (★)
- FreeMarker
- Groovy
- Mustache
JSP를 권장하지 않는 이유
- 스프링 부트의 Goal : 내장WAS로 독립적으로 실행 가능한 웹 어플리케이션을 빠르게 배포
- JSP 사용 시
- WAR패키징만 가능
- Undertow 서블릿 컨테이너는 JSP 미지원
- 의존성 문제 가능성
Thymeleaf 사용
- 의존성 추가 : spring-boot-starter-thymeleaf
- 템플릿 탐색 위치 : src/main/resources/templates/
실습
1. 테스트 작성
- MockMvc 객체의 perform(HTTP요청메소드)로 ResultActions 객체 생성
- ResultActions 객체의 andDo(print())로 응답본문 콘솔에 출력가능
- ResultActions 객체의 andExpect() 안에서 view()로 ViewResultMatchers 객체 생성
- view().name() / model.attribute()로 테스트 가능
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
@RunWith(SpringRunner.class)
@WebMvcTest(SampleController.class)
public class SampleControllerTest{
@Autowired
MockMvc mockMvc;
@Test
public void hello() throws Exception {
//요청: /hello
//응답:
// - 모델 Attribute name : kkambi
// - 뷰 이름 : hello
mockMvc.perform(get("/hello"))
.andExpect(status().isOk())
.andDo(print())
.andExpect(view().name("hello"))
.andExpect(model().attribute("name", is("kkambi")))
.andExpect(content().string(containsString("hello world!")));
}
}
|
cs |
2. View name을 반환하는 @Controller 작성
- [왜] ModelAndView를 안쓰고 Model만 써도 될까?
- 리턴값으로 View를 표현할 것이므로 상관없다 함
- Model 객체를 일종의 Map으로 생각하여, attribute를 설정해줄 수 있다
1
2
3
4
5
6
7
8
9
|
@Controller
public class SampleController{
@GetMapping("/hello")
public String hello(Model model){
model.attribute("name", "kkambi");
return "hello";
}
}
|
cs |
3. 동적 리소스 작성
- (★) html 태그 내의 attribute로 xmlns:th="http://www.thymeleaf.org" 를 반드시 추가!
- 학습링크 https://www.thymeleaf.org/doc/articles/standarddialect5minutes.html
1
2
3
4
5
6
7
8
9
10
11
|
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
hello world!
<h1 th:text="${name}">name이 존재하지 않을 때 표시되는 문구</h1>
</body>
</html>
|
cs |
SpringBootTest에선 Mock 서블릿을 사용하는데?
- [어떻게] 동적 렌더링 결과를 테스트에서 확인할 수 있을까??
- Thymeleaf는 가능!
- 독자적으로 최종 View를 완성
- 서블릿 엔진 개입X
- JSP는 불가능! 서블릿 엔진이 렌더링하기 때문!
'학습 > Spring' 카테고리의 다른 글
[spring] 스프링 부트의 Hateoas 지원 (2) | 2020.05.03 |
---|---|
[spring] 스프링 웹 MVC의 ExceptionHandler (0) | 2020.04.26 |
[spring] 스프링에서 WebJars 이용하기 (0) | 2020.04.23 |
[spring] 스프링 웹 MVC의 정적 리소스 지원 (0) | 2020.04.23 |
[spring] 스프링 웹 MVC의 ViewResolver (0) | 2020.04.21 |
댓글