1. 소개
이 예제에서는 Thymeleaf를 사용하여 Spring MVC 데이터에 액세스하는 다양한 방법에 대해 설명합니다.
Thymeleaf를 사용하여 이메일 템플릿을 생성하는 것으로 시작하고 Spring 애플리케이션의 데이터로 이를 향상시킬 것입니다.
2. 프로젝트 설정
먼저 Thymeleaf 의존성 을 추가해야 합니다 .
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.7.2</version>
</dependency>
둘째, Spring Boot 웹 스타터 를 포함시키겠습니다 .
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.2</version>
</dependency>
이 의존성은 나중에 일부 Endpoints을 만드는 데 사용할 REST 지원을 제공합니다.
예제 사례를 처리하기 위해 몇 가지 Thymeleaf 템플릿을 생성하고 resources/mvcdata 에 저장합니다 . 사용방법(예제)의 각 섹션은 다른 템플릿을 구현합니다.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<!-- data -->
</html>
마지막으로 비즈니스 로직을 저장할 컨트롤러 클래스를 구현해야 합니다.
@Controller
public class EmailController {
private ServletContext servletContext;
public EmailController(ServletContext servletContext) {
this.servletContext = servletContext;
}
}
컨트롤러 클래스는 항상 서블릿 컨텍스트에 의존하지는 않지만 여기에 추가하여 나중에 특정 Thymeleaf 기능을 시연할 수 있습니다.
3. 모델 속성
모델 속성은 뷰 내에서 렌더링할 데이터를 준비하는 컨트롤러 클래스 내에서 사용됩니다 .
모델에 속성을 추가할 수 있는 한 가지 방법은 모델 인스턴스를 컨트롤러 메서드의 매개변수로 요구하는 것입니다.
emailData 를 속성으로 전달해 보겠습니다 .
@GetMapping(value = "/email/modelattributes")
public String emailModel(Model model) {
model.addAttribute("emailData", emailData);
return "mvcdata/email-model-attributes";
}
Spring은 /email/modelattributes 가 요청 될 때 우리를 위해 Model 의 인스턴스를 주입할 것 입니다.
그런 다음 Thymeleaf 표현식에서 emailData 모델 속성을 참조할 수 있습니다 .
<p th:text="${emailData.emailSubject}">Subject</p>
우리가 할 수 있는 또 다른 방법은 @ModelAttribute 를 사용하여 Spring 컨테이너에 어떤 속성이 필요한지 알려주는 것입니다 .
@ModelAttribute("emailModelAttribute")
EmailData emailModelAttribute() {
return emailData;
}
그런 다음 뷰의 데이터를 다음과 같이 나타낼 수 있습니다.
<p th:each="emailAddress : ${emailModelAttribute.getEmailAddresses()}">
<span th:text="${emailAddress}"></span>
</p>
모델 데이터에 대한 더 많은 예제 는 Spring MVC 예제 의 Model, ModelMap 및 ModelView 를 확인하세요.
4. 요청 매개변수
데이터에 액세스하는 또 다른 방법은 요청 매개변수를 사용하는 것입니다.
@GetMapping(value = "/email/requestparameters")
public String emailRequestParameters(
@RequestParam(value = "emailsubject") String emailSubject) {
return "mvcdata/email-request-parameters";
}
한편 템플릿에서 param 키워드를 사용하여 데이터를 포함하는 매개변수 를 지정해야 합니다 .
<p th:text="${param.emailsubject}"></p>
동일한 이름을 가진 여러 요청 매개변수를 가질 수도 있습니다.
@GetMapping(value = "/email/requestparameters")
public String emailRequestParameters(
@RequestParam(value = "emailsubject") String emailSubject,
@RequestParam(value = "emailaddress") String emailAddress1,
@RequestParam(value = "emailaddress") String emailAddress2) {
return "mvcdata/email-request-parameters";
}
그런 다음 데이터를 표시하는 두 가지 옵션이 있습니다.
먼저 th:each 를 사용하여 동일한 이름을 가진 각 매개변수를 살펴볼 수 있습니다.
<p th:each="emailaddress : ${param.emailaddress}">
<span th:text="${emailaddress}"></span>
</p>
둘째, 매개변수 배열의 인덱스를 사용할 수 있습니다.
<p th:text="${param.emailaddress[0]}"></p>
<p th:text="${param.emailaddress[1]}"></p>
5. 세션 속성
또는 데이터를 HttpSession 속성 에 배치할 수 있습니다 .
@GetMapping("/email/sessionattributes")
public String emailSessionAttributes(HttpSession httpSession) {
httpSession.setAttribute("emaildata", emailData);
return "mvcdata/email-session-attributes";
}
그런 다음 요청 매개변수와 유사하게 세션 키워드를 사용할 수 있습니다.
<p th:text="${session.emaildata.emailSubject}"></p>
6. ServletContext 속성
ServletContext 를 사용 하면 emailData 의 속성 에 액세스하는 표현식을 사용할 수 없습니다 .
이 문제를 해결하기 위해 각 값을 별도의 속성으로 전달합니다.
@GetMapping("/email/servletcontext")
public String emailServletContext() {
servletContext.setAttribute("emailsubject", emailData.getEmailSubject());
servletContext.setAttribute("emailcontent", emailData.getEmailBody());
servletContext.setAttribute("emailaddress", emailData.getEmailAddress1());
servletContext.setAttribute("emaillocale", emailData.getEmailLocale());
return "mvcdata/email-servlet-context";
}
그런 다음 servletContext 변수를 통해 각각 검색할 수 있습니다.
<p th:text="${#servletContext.getAttribute('emailsubject')}"></p>
7. Bean
마지막으로 컨텍스트 빈을 사용하여 데이터를 제공할 수도 있습니다.
@Bean
public EmailData emailData() {
return new EmailData();
}
Thymeleaf는 @beanName 구문 을 사용하여 빈 액세스를 허용합니다.
<p th:text="${@emailData.emailSubject}"></p>
8. 결론
이 작은 예제에서는 Thymeleaf를 통해 데이터에 액세스하는 방법을 배웠습니다.
먼저 적절한 의존성을 추가했습니다. 둘째, 템플릿에 데이터를 전달할 수 있도록 몇 가지 REST 메서드를 구현했습니다.
항상 그렇듯이 코드는 GitHub에서 사용할 수 있습니다 .