Skip to content

执行模板引擎

上下文对象准备就绪后,我们即可让模板引擎根据模板名称,结合该上下文处理模板,并传入响应输出流的 Writer 对象,将处理结果写入响应:

java
templateEngine.process("home", ctx, writer);

我们来看使用西班牙语环境(Spanish locale) 处理后的输出结果:

html
<!DOCTYPE html>

<html>

  <head>
    <title>Good Thymes Virtual Grocery</title>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
    <link rel="stylesheet" type="text/css" media="all" href="/gtvg/css/gtvg.css" />
  </head>

  <body>
  
    <p>¡Bienvenido a nuestra tienda de comestibles!</p>

  </body>

</html>

核心代码解释

  1. templateEngine.process 方法参数
    • 第一个参数 "home":模板名称,结合模板解析器的 prefix/WEB-INF/templates/)和 suffix.html),最终定位到 /WEB-INF/templates/home.html
    • 第二个参数 ctx:上下文对象,提供模板渲染所需的Locale(西班牙语)和变量数据;
    • 第三个参数 writer:响应的输出流对象,模板引擎将渲染后的 HTML 直接写入该流,最终返回给客户端。
  2. 渲染结果的关键变化
    • th:text="#{home.welcome}" 被替换为西班牙语文本 ¡Bienvenido a nuestra tienda de comestibles!
    • th:href="@{/css/gtvg.css}" 被解析为绝对路径 /gtvg/css/gtvg.css(自动拼接应用上下文路径 gtvg);
    • 所有 Thymeleaf 专属属性(th:*)都被移除,输出纯标准 HTML,确保浏览器可正常解析。

总结

  1. templateEngine.process() 是触发模板渲染的核心方法,需传入模板名、上下文、输出流三个核心参数。
  2. 模板引擎处理后会移除所有 Thymeleaf 语法,输出纯标准 HTML,同时根据上下文的 Locale 渲染对应语言的文本。
  3. URL 表达式 @{/css/gtvg.css} 会自动拼接应用上下文路径,避免硬编码路径导致的部署问题。