Conceitos de Estatização de Páginas
Em sistemas com alto tráfego como listagens e detalhes de planos de saúde, o acesso frequente ao banco de dados gera sobrecarga. A estatização transforma conteúdo dinâmico em páginas HTML estáticas, eliminando consultas repetitivas. Técnicas como Freemarker ou Thymeleaf automatizam a geração desses arquivos.
Implemantação com Freemarker
Gere páginas estáticas para listagem e detalhamento de plenos:
Dependência Maven
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
Modelos de Templlate
Modelo para Listagem (pacotes.ftl):
<html>
<body>
<ul>
<#list planos as plano>
<li>
<a href="detalhe_plano_${plano.codigo}.html">
<img src="${plano.imagemUrl}">
<h4>${plano.nome}</h4>
</a>
</li>
</#list>
</ul>
</body>
</html>
Modelo para Detalhes (detalhe_plano.ftl):
<html>
<body>
<div class="card">
<img src="${plano.imagemUrl}">
<h4>${plano.nome}</h4>
<div>
<#list plano.gruposVerificacao as grupo>
<div>${grupo.titulo}</div>
</#list>
</div>
</div>
</body>
</html>
Configuração Spring
<bean id="configuradorFreemarker"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/templates/" />
</bean>
Lógica de Geração
@Service
public class ServicoPlanoImpl implements ServicoPlano {
@Value("${caminho.saida}")
private String diretorioSaida;
public void adicionarPlano(PlanoSaude plano, Integer[] idsGrupos) {
// Lógica de persistência
gerarPaginasEstaticas();
}
private void gerarPaginasEstaticas() {
List<PlanoSaude> planos = buscarTodosPlanos();
gerarListagemPlanos(planos);
gerarDetalhesPlanos(planos);
}
private void gerarListagemPlanos(List<PlanoSaude> planos) {
Map<String, Object> dados = new HashMap<>();
dados.put("planos", planos);
processarTemplate("pacotes.ftl", "lista_planos.html", dados);
}
private void processarTemplate(String template, String arquivoSaida, Map<String, Object> dados) {
Configuration config = configuradorFreemarker.getConfiguration();
try (Writer escritor = new FileWriter(diretorioSaida + arquivoSaida)) {
Template modelo = config.getTemplate(template);
modelo.process(dados, escritor);
} catch (Exception e) {
// Tratamento de erros
}
}
}
Estratégias de Geração
- Disparo: Ativado após alterações nos planos
- Localização: Diretório do aplicativo móvel durante execução
- Quantidade: Uma página de listagem + múltiplas páginas de detalhe