Thymeleaf模板引擎使用

 

什么是Thymeleaf

Thymeleaf是一个Java库。它是一个XML / XHTML / HTML5模板引擎,能够在模板文件上应用一组转换,将程序产生的数据或者文本显示到模板文件上。

Thymeleaf依赖的jar

要使用Thymeleaf,需要在我们的web应用的classpath路径中引入相关的jar,如下:

thymeleaf-2.1.3.RELEASE.jar
ognl-3.0.6.jar
javassist-3.16.1-GA.jar
unbescape-1.0.jar
servlet-api-2.5.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
log4j-1.2.15.jar
mail-1.4.jar
activation-1.1.jar

创建模板解析器

使用Thymeleaf的前提非常简单,首先创建一个模板解析器,用来加载模板,如下:

1 //Create Template Resolver
2 ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
3 //ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();

创建模板解析器可以用Servlet上下文模板解析器ServletContextTemplateResolver或者类加载模板解析器ClassLoaderTemplateResolver。创建模板解析器将指定我们从Servlet上下文检索模板文件作为资源,并考虑应用程序的根路径作为资源的路径。如下:

// XHTML is the default mode, but we will set it anyway for better understanding of code
templateResolver.setTemplateMode("XHTML");
// This will convert "home" to "/WEB-INF/templates/home.html"
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");

如上所示,通过解析器创建模板节点,当使用Thymeleaf渲染名为“home”的模板的的时候,将,解析器将会自动加上前缀和后缀(扩展名)。

创建模板引擎

创建了模板解析器加载模板后,接下来需要创建一个模板引擎去做实际的处理工作,如下:

//Create Template Engine
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);

创建模板引擎很近单,只需要一个模板解析器实例。创建了关键的模板解析器和模板引擎之后,我们就可以创建模板页面使用Thymeleaf

创建模板

我们的模板文件放在/WEB-INF/templates/路径下。创建模板文件只需要指定Thymeleaf特定的DOCTYPE和命名空间。如下:

复制代码
<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org">
  <head>
    <title>Hello thymeleaf</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  </head>
  <body>
    <p>
      <span th:text="#{home.welcome}">this is text will not be show</span>
    </p>
  </body>
</html>
复制代码

 

如上图所示,模板文件中还定义了一个“th:text”属性,我们认为模板文件是有效的,因为我们已经通过doctype声明了Thymeleaf dtd,这个类库里面声明了这个属性。当这个模板被处理时,这个“th:text”属性将被移除,模板文件将被替换成一个严格的标准的XHTML文件。

模板文件中的th:text”属性的值是一个变量表达式,它将获取变量“hellword”的值作为<span>标签的文本显示到页面上。

创建模板上下文

为了能显示变量“hellword”的值,我们需创建模板上下文,将变量输出到模板文件中。如下图:

//Create Servlet context
WebContext ctx = new WebContext(req, resp, this.getServletContext(), req.getLocale());
ctx.setVariable("helloword","hello thymeleaf,wellcome!");

执行模板引擎

万事具备,只欠引擎没有开火。现在我们需要做的就是执行模板引擎,执行模板引擎需要传入模板名、上下文对象以及响应流。如下:

//Executing template engine
templateEngine.process("home", ctx, resp.getWriter());

让我们看看执行模板引擎后的结果:

 

OK,如上所说,模板文件被替换成了标准的XHTML文件了。

 

更多了解请访问官方网站http://www.thymeleaf.org/

 

附源码:

 

复制代码
public class thymeleafServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req,resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        //Create Template Resolver
        ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
        //ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
        // XHTML is the default mode, but we will set it anyway for better understanding of code
        templateResolver.setTemplateMode("XHTML");
        // This will convert "home" to "/WEB-INF/templates/home.html"
        templateResolver.setPrefix("/WEB-INF/templates/");
        templateResolver.setSuffix(".html");
        // Set template cache TTL to 1 hour. If not set, entries would live in cache until expelled by LRU
        templateResolver.setCacheTTLMs(Long.valueOf(3600000L));
        // Cache is set to true by default. Set to false if you want templates to
        // be automatically updated when modified.
        templateResolver.setCacheable(true);
        //Create Template Engine
        TemplateEngine templateEngine = new TemplateEngine();
        templateEngine.setTemplateResolver(templateResolver);
        //Write the response headers
        resp.setContentType("text/html;charset=UTF-8");
        resp.setHeader("Pragma", "no-cache");
        resp.setHeader("Cache-Control", "no-cache");
        resp.setDateHeader("Expires", 0);
        //Create Servlet context
        WebContext ctx = new WebContext(req, resp, this.getServletContext(), req.getLocale());
        ctx.setVariable("helloword","hello thymeleaf,wellcome!");
        
        //Executing template engine
        templateEngine.process("home", ctx, resp.getWriter());
    }
}
复制代码


作者:ITPSC
出处:http://www.cnblogs.com/hjwublog/
温馨提示:当您看到这篇文章时,我可能在很久之前就已经准备了,如果您觉得阅读本文能让你有所收获,请点一下“推荐”按钮或者“关注我”按钮,您的肯定将是我写作的动力!欢迎转载,转载请注明出处


【1888元】阿里云产品通用优惠券

【开年HI购季】爆款云产品5折

【助力企业上云】性能级主机2-5折

【全民云计算】云主机低至2折

【商标注册服务】低至300元

【超高返现】购物车全产品返25%

【阿里云自营建站】买一年送一年


posted @   ITPSC  阅读(12755)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示