深色模式
模板解析器
我们先从模板解析器(Template Resolver) 讲起:
java
final WebApplicationTemplateResolver templateResolver =
new WebApplicationTemplateResolver(application);模板解析器是实现了 Thymeleaf API 中 org.thymeleaf.templateresolver.ITemplateResolver 接口的对象:
java
public interface ITemplateResolver {
...
/*
* 模板会根据其名称(或内容)解析,若为其他模板解析片段,还可指定所属模板(owner template)。
* 如果当前模板解析器无法处理该模板,将返回 null。
*/
public TemplateResolution resolveTemplate(
final IEngineConfiguration configuration,
final String ownerTemplate, final String template,
final Map<String, Object> templateResolutionAttributes);
}这些对象负责决定模板的访问方式。在这个 GTVG 应用中,使用 org.thymeleaf.templateresolver.WebApplicationTemplateResolver 意味着我们将从 IWebApplication 对象中获取模板文件(作为资源)——IWebApplication 是 Thymeleaf 的抽象层,在基于 Servlet 的应用中,它本质上是对 Servlet API 的 [javax|jakarta].servlet.ServletContext 对象的封装,能从 Web 应用根目录解析资源。
不过模板解析器的配置远不止这些,我们还可以为它设置一些参数。首先是模板模式:
java
templateResolver.setTemplateMode(TemplateMode.HTML);HTML 是 WebApplicationTemplateResolver 的默认模板模式,但显式声明仍是最佳实践,能让代码的意图更清晰。
java
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");前缀(prefix)和后缀(suffix)会修改我们传给引擎的模板名称,从而得到实际要使用的资源名称。
比如配置后,模板名 product/list 会对应到:
java
servletContext.getResourceAsStream("/WEB-INF/templates/product/list.html")此外,我们还可以通过 cacheTTLMs 属性在模板解析器中配置解析后的模板在缓存中的存活时间(可选):
java
templateResolver.setCacheTTLMs(3600000L);即便未达到这个存活时间(TTL),如果缓存达到最大容量,该模板也可能因成为最久未使用(LRU)的条目而被清除。
INFO
用户可以通过实现 ICacheManager 接口,或修改 StandardCacheManager 对象(管理默认缓存),来自定义缓存行为和缓存大小。
关于模板解析器还有很多内容可以深入学习,但现在我们先看看模板引擎(Template Engine) 对象的创建过程。
核心代码解释
- TemplateResolver 核心作用:作为模板引擎和模板文件之间的“桥梁”,定义模板的存储位置、格式、缓存规则,核心方法
resolveTemplate负责将模板名解析为实际的资源路径。 - 路径拼接规则:
prefix + 模板名 + suffix是 Thymeleaf 定位模板的核心逻辑,/WEB-INF/templates/是 Web 应用中模板的常用存放路径(受 Servlet 保护,无法直接通过 URL 访问)。 - 缓存TTL配置:
3600000L对应 1 小时,设置缓存有效期能减少重复解析模板的性能开销;开发阶段可临时关闭缓存(setCacheable(false)),避免修改模板后重启应用。
总结
- 模板解析器(TemplateResolver)是 Thymeleaf 初始化的核心,主要配置模板的访问路径、解析模式、缓存规则。
WebApplicationTemplateResolver适配 Servlet 环境,通过封装 ServletContext 从应用根目录加载模板资源。- 前缀/后缀配置能简化模板名的使用,缓存配置则是平衡性能和开发便捷性的关键。
