Web/Spring

Thymeleaf

dev_sr 2020. 9. 30. 00:58

spring boot REST API 와 html을 이용해서 정적인 웹페이지를 만들어보고 싶었다.

spring에서 먼저 html 페이지를 로컬 호스트에서 띄워보고 싶었음 

 

참고한 글

 

Spring boot - Thymeleaf 소개 및 설정

1. Overview Thymeleaf에 관련한 소개와 자세한 내용은 링크로 대체하겠습니다. 스프링과 통합이 비교적 쉽고 개발자가 사용하기 무난한 편입니다. 런닝커브가 크지 않아서 기존에 freemarker나 velocity ��

eblo.tistory.com

 

Thymeleaf라는 것은 스프링에 최적화 되어있고!

html 포맷이라서 편하게 쓸 수 있다는 것을 알게됨

 

먼저 프로젝트를 생성할 때 srping web과 developer tool, thymleaf를 넣어줌

파일 구조는 src/main/resources / templates 밑에 html을 만들어줌

 

application properties는 설정 안해도 동작하지만

블로그에 나온대로 설정해줌

cache의 경우는 true값일 경우 껐다가 켜야 변경값이 확인이 된다고 함

 

spring.thymeleaf.prefix=classpath:templates/

spring.thymeleaf.check-template-location=true

spring.thymeleaf.suffix=.html

spring.thymeleaf.mode=HTML5

spring.thymeleaf.cache=false

 

요래 index.html과 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>Index!</h3>
</body>
</html>

 

대충 다른 nextPage.html 을 만들었는데

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>Next Page!</h3>
</body>
</html>

 

Rest API 컨트롤러에서 불러올 때는

리턴값으로 html이름만 불러오면 작동하는 것처럼 보였음 

 

컨트롤러는 이렇게 @RestController를 써서 만들어줌 

@RestController
public class Test2Controller {

	@GetMapping("/main")
	public String main() {
		return "index";
	}

	@GetMapping("/next")
	public String next() {
		return "nextPage";
	}

}

 

내가 예상한 화면

h3 태그가 살아있는 html 페이지

 

 

 

실제로 나온 페이지

html 파일이 아니라 리턴한 문자열이 그대로 나왔다ㅋㅋ

 

 

타임리프가 이상한가 싶어서 디펜던시로 다시 붙여넣어보고

설정이나 버전을 이래저래바꿔 봤는데 해결되지 않았음..

 

왜 타임리프가 적용이 안될까 계속 검색해봤는데

@RestController 때문이였다..

@RestController를 @Controller로 바꿔주니 제대로 나왔다

 

package com.test.test;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class Test2Controller {

	@GetMapping("/main")
	public String main() {
		return "index";
	}

	@GetMapping("/next")
	public String next() {
		return "nextPage";
	}

}