스프링 프레임워크에서 Thymeleaf를 사용하기 위해서 설정하는 방법을 알아봅니다. 스프링 프레임워크 설정은 xml을 사용하는 방법, Java를 사용하는 방법, Spring Boot를 사용하는 방법이 있습니다. 각각의 경우에 설정하는 방법을 알아보겠습니다.
1. XML 설정에서 Thymeleaf 설정하기
요즘은 Java 설정이나 Spring Boot를 사용하는 쪽으로 바뀌어가고 있지만, 아직도 대부분은 xml 설정을 사용하는것 같습니다. 주로 이걸 사용해와서 가장 익숙한 설정입니다. 예전에 올렸던 "스프링 프레임웍에서 MyBatis, Oracle 사용하기" 예제를 MySQL을 사용하도록 수정해서 예제를 만들었습니다.
1.1 pom.xml 파일에 Thymeleaf에 대한 의존성을 추가합니다.
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
1.2 뷰 리졸버를 설정합니다.
템플릿 엔진과 jsp 두 가지를 모두 사용해야 할 경우가 있을지는 모르겠지만 일단 두 가지를 모두 사용할 수 있도록 설정해 봅니다.
/WEB-INF/views/ 폴더 아래에 jsp와 thymeleaf를 위한 폴더를 각각 생성합니다. 폴더 이름은 jsp와 thymeleaf입니다. jsp 뷰 리졸버 설정에 "viewNames" 프로퍼티를 "jsp/*"로 설정합니다.
<!-- jps 뷰 리졸버 설정 -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
<beans:property name="viewNames" value="jsp/*" />
</beans:bean>
<!-- Thymeleaf 뷰 리졸버 -->
<beans:bean id="templateResolver"
class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".html" />
<beans:property name="templateMode" value="HTML5" />
</beans:bean>
<beans:bean id="templateEngine"
class="org.thymeleaf.spring5.SpringTemplateEngine">
<beans:property name="templateResolver" ref="templateResolver" />
</beans:bean>
<beans:bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<beans:property name="templateEngine" ref="templateEngine" />
</beans:bean>
1.3 컨트롤러 생성
컨트롤러에서 반환값에 viewNames를 보함해서 반환합니다. /WEB-INF/views/thymeleaf/welcome.html 파일이 호출 됩니다.
@RequestMapping("/welcome.do")
public String welcome(Model model) throws Exception {
model.addAttribute("greeting", "Hello Thymeleaf!");
return "thymeleaf/welcome";
}
1.4 템플릿 파일 생성
/WEB-INF/views/thymeleaf/welcome.html 파일 입니다.
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8" />
<title>Welcome!</title>
</head>
<body>
<h1 th:text="${greeting}">Greeting!</h1>
</body>
</html>
1.5 예제 전체 소스 입니다.
2. Java 설정에서 Thymeleaf 설정하기
이전에 작성한 "스프링프레임워크 Java config로 MyBatis 사용하기" 소스를 수정해서 예제를 작성했습니다.
2.1 pom.xml 파일에 의존성 추가하기
- xml 설정과 같습니다.
2.2 뷰 리졸버 설정하기
@Autowired
private ApplicationContext applicationContext;
/**
* jsp 뷰 리졸버 설정
* @return
*/
@Bean
public ViewResolver getViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setViewNames("jsp/*");
return resolver;
}
/**
* Thymeleaf 뷰 리졸버 설정
* @return
*/
@Bean
public ViewResolver viewResolver() {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine((ISpringTemplateEngine)templateEngine());
resolver.setCharacterEncoding("UTF-8");
return resolver;
}
@Bean
public TemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setEnableSpringELCompiler(true);
engine.setTemplateResolver(templateResolver());
return engine;
}
private ITemplateResolver templateResolver() {
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setApplicationContext(applicationContext);
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".html");
resolver.setTemplateMode(TemplateMode.HTML);
return resolver;
}
2.3 컨트롤러 설정
- xml 설정과 같습니다.
2.4 템플릿 파일 생성
- xml 설정과 같습니다.
2.5 전체 예제 소스 입니다.
3. Spring Boot 설정에서 Thymeleaf 설정하기
이전 예제 "Spring Boot + Kotlin + Thymeleaf 프로젝트 만들기"에서 언어를 Java로 변경하여 예제를 작성했습니다. 프로젝트 생성은 이 글을 참조해 주세요. Spring Boot예제는 thymeleaf와 jsp를 모두 적용하도록 설정하지 않았습니다.
Spring Boot가 처음 설정은 가장 간편한데, 설정을 수정하려고 하면 사용법이 좀 생소해서 어려운것 같습니다. 필요하면 다음에 해 보아야 할 것 같습니다.
3.1 Spring Boot 프로젝트 생성시 Thymeleaf를 선택합니다.
설정이 가장 간단합니다. 프로젝트 생성시 Thymeleaf를 선택하기만 하면 됩니다. 이걸로 끝입니다.
pom.xml 파일에는 다음 내용이 자동으로 추가 됩니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
3.2 전체 예제 소스 입니다.
'프로그래밍 > 스프링프레임워크' 카테고리의 다른 글
Spring Boot 웹 애플리케이션에서 jsp와 Thymeleaf 두 가지 같이 사용하기 (8) | 2019.10.27 |
---|---|
Spring Boot 국제화(다국어 지원) 설정하기 (4) | 2019.10.19 |
아노테이션 드리븐 트랜잭션(@Transactional)에서 Exception을 throw할 경우 롤백(rollback)이 안됩니다. (3) | 2019.10.07 |
Spring Boot 웹애플리케이션에서 서비스 포트와 컨텍스트 패스를 변경하기 (0) | 2019.09.29 |
Spring Boot + Kotlin + Thymeleaf 프로젝트 만들기 (0) | 2019.08.19 |