Renderização de Páginas Web com Thymeleaf no Spring Boot

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>

Tags: spring-boot thymeleaf spring-mvc java html-templates

Publicado em 7-15 18:44