模版解析器

让我们从模版解析器开始:

ServletContextTemplateResolver templateResolver = 
        new ServletContextTemplateResolver(servletContext);

模版解析器是一些对象。这些对象实现了来自于Thymeleaf API的接口(org.thymeleaf.templateresolver.ITemplateResolver):

public interface ITemplateResolver {

    ...

    /*
     * Templates are resolved by their name (or content) and also (optionally) their 
     * owner template in case we are trying to resolve a fragment for another template.
     * Will return null if template cannot be handled by this template resolver.
     */
    public TemplateResolution resolveTemplate(
            final IEngineConfiguration configuration,
            final String ownerTemplate, final String template,
            final Map<String, Object> templateResolutionAttributes);
}

这些对象决定着我们的模版怎样被访问。在百里香虚拟杂货店应用里,org.thymeleaf.templateresolver.ServletContextTemplateResolver意味着:我们将会把模版文件作为来自于Servlet上下文的资源来取回。应用范围的javax.servlet.ServletContext对象存在于每一个Java网络应用。它会从网络应用根部分解资源。

但是,这并不是我们能够讨论的关于模版解析器的所有内容,因为我们能够在它上面设置一些配置参数。首先,模版模式:

templateResolver.setTemplateMode(TemplateMode.HTML);

HTML是ServletContextTemplateResolver默认的模版模式,但是多写上这一行是一种良好的实践,这样对于将要发生什么,看到我们的代码就会一目了然。

templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");

前缀和后缀会修改我们传递给引擎的模版名字。

使用这项配置,模版名“product/list”会变成:

servletContext.getResourceAsStream("/WEB-INF/templates/product/list.html")

🉑️选地,通过设置cacheTTLMs属性,可以在模版解析器里配置解析好的模版在缓存里的存活时间。

templateResolver.setCacheTTLMs(3600000L);

如果达到了最大缓存,并且还是目前最旧的入口,那么在生存时间结束之前,模版仍旧会从缓存中被除去。

用户可以通过实现`ICacheManager`接口,来定义缓存的行为和大小,或者修改`StandardCacheManager`对象来管理默认的缓存。

模版解析器还有很多要学习的地方,但是目前让我们先看一看模版引擎对象的创建方法。

Last updated