@Controller
public class FuckController {
@GetMapping("/fuck")
public String HolyShit(Model model) {
model.addAttribute("data", "i hate you");
return "hello"; //match to resource/template/{templateName}
}
}
Thymeleaf에서 Return값은 resource/template 에 있는 HTML 파일명이 된다.
이유는 무엇일까?
View Resolver
Spring MVC가 기본적으로 뷰 리졸버(View Resolver) 설정을 통해 템플릿 파일을 찾기 때문
@GetMapping("/fuck")
요청을 처리하는 메서드에서 "hello"
를 반환ViewResolver
에 의해 템플릿 파일명을 나타냄Spring에서는 기본적으로 InternalResourceViewResolver
를 사용하여 src/main/resources/templates
폴더 아래에 있는 템플릿 파일을 찾음
예를 들어, hello
가 반환되면, ViewResolver
는 이 이름에 해당하는 파일 src/main/resources/templates/hello.html
을 찾아서 렌더링
hello.html
파일을 찾고, 이 파일을 렌더링하는 과정에서 model.addAttribute("data", "i hate you")
를 사용해 전달된 데이터를 템플릿에 바인딩하여 사용자에게 반환InternalResourceViewResolver
prefix="/WEB-INF/views/"와 suffix=".jsp"
를 설정하면, 논리적 뷰 이름 home
은 실제 파일 /WEB-INF/views/home.jsp
로 변환@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
ThymeleafViewResolver
@Bean
public ThymeleafViewResolver viewResolver() {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setPrefix("/WEB-INF/templates/");
resolver.setSuffix(".html");
return resolver;
}
FreeMarkerViewResolver
@Bean
public FreeMarkerViewResolver viewResolver() {
FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
resolver.setPrefix("/WEB-INF/freemarker/");
resolver.setSuffix(".ftl");
return resolver;
}