O Paradigma de Templates no Spring Boot
Em arquiteturas modernas baseadas em Spring Boot, as aplicações são empacotadas como arquivos JAR executáveis, utilizando servidores web embutidos, como o Tomcat. Essa abordagem torna o uso tradicional de JSP inviável e desencorajado. Para resolver a necessidade de renderização dinâmica de HTML no servidor, o ecossistema Spring recomenda o uso de motores de template, sendo o Thymeleaf a escolha principal.
O Thymeleaf atua processando um template HTML estático, injetando dados dinâmicos vindos do backend diretamente nas marcações especiais, gerando a resposta final para o cliente. Sua sintaxe natural permite que os arquivos HTML sejam abertos e visualizados corretamente em navegadores mesmo antes do processamento no servidor.
Configuração e Dependências
Para integrar o motor de templates ao projeto, basta incluir o starter oficial no arquivo de configuração do Maven (pom.xml):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Regras de Autoconfiguração
O Spring Boot utiliza a classe ThymeleafProperties para definir o comportamento padrão do motor. Por padrão, o framework busca os arquivos de template no diretório classpath:/templates/ e espera que a extensão dos arquivos seja .html.
Essas configurações padrão podem ser visualizadas e sobrescritas através do arquivo application.yml:
spring:
thymeleaf:
prefix: classpath:/templates/
suffix: .html
mode: HTML
encoding: UTF-8
cache: false
Com essa estrutura, basta posicionar os arquivos HTML dentro da pasta templates em src/main/resources para que o Spring Boot os reconheça e renderize automaticamente.
Exemplo de Implementação
Para demonstrar o fluxo de dados entre o controlador e a view, criaremos um endpoint que envia informações de um painel administrativo para o template.
Controlador Spring
package com.exemplo.web;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/painel")
public class PainelAdministrativoController {
@GetMapping("/dashboard")
public String carregarDashboard(Model model) {
model.addAttribute("nomeUsuario", "Administrador");
model.addAttribute("totalAcessos", 1540);
return "dashboard";
}
}
Template HTML
O arquivo dashboard.html deve ser criado dentro de src/main/resources/templates/. Note o uso do namespace th para as diretivas do Thymeleaf.
<html lang="pt-BR" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Painel de Controle</title>
</head>
<body>
<header>
<h1>Bem-vindo, <span th:text="${nomeUsuario}">Visitante</span>!</h1>
</header>
<main>
<p>Você possui <strong th:text="${totalAcessos}">0</strong> acessos registrados hoje.</p>
</main>
</body>
</html>
Expressões de URL e Recursos Estáticos
Para vincular recursos estáticos (como CSS, JavaScript e imagens) ou criar links dinâmicos, o Thymeleaf fornece a expressão de URL @{...}. Essa sintaxe garante que o contexto da aplicação seja respeitado corretamente.
Exemplo de inclusão de folhas de estilo, scripts e links dinâmicos:
<!-- Vinculando um arquivo CSS -->
<link rel="stylesheet" th:href="@{/css/estilos-principais.css}" />
<!-- Vinculando um arquivo JavaScript -->
<script th:src="@{/js/app-interativa.js}"></script>
<!-- Criando um link dinâmico com parâmetros -->
<a th:href="@{/usuarios/detalhes(id=${userId})}">Ver Perfil</a>