欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Thymeleaf模板引擎

程序员文章站 2022-05-01 23:14:32
...

一、first

       通过这篇博文,您将了解到什么是Thymeleaf,以及和springboot作为伴侣她是如何使用的,同时还有一些简单的页面缓存的内容。


二、what is it

       Thymeleaf是模板引擎,可以处理html,xml,js,css,甚至是纯文本(text),特别是html5。官网对他的解释是:是一个适用于web和独立环境的现代服务器端java模板引擎。

       它可以完全替代JSP,她具有以下特点:
       1. 支持html原形,在html标签里增加额外的属性来达到模板+数据的展示方式;浏览器解释html时会忽略未定义的标签属性,所以thymeleaf模板可以静态的运行;当有数据返回页面时,thymeleaf标签会动态地替换掉静态内容,使页面动态显示。
       2. thymeleaf开箱即用,可以直接套用模板实现JSTL表达式效果,避免每天改模板,改jstl,比较优雅,同时开发人员可以扩展和创建自定义方言。


三、 using(+springboot)

3.1 添加依赖

       和springboot一起使用,方便很多加入如下配置:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

3.2 增加配置

       在属性配置文件中可以增加如下配置:我们可以看到,thymeleaf使用的页面都是html格式的。

spring:
  #thymeleaf
  thymeleaf:
    cache: false
    servlet:
      content-type: text/html
    enabled: true
    encoding: UTF-8
    mode: HTML5
    prefix: classpath:/templates/
    suffix: .html

3.3 使用

       在html的头部增加配置

<html xmlns:th="http://www.thymeleaf.org">

       例如经典的welcom页面如下:

<!DOCTYPE html>
<html xmlns:th="https://www.thymeleaf.org/">
<head>
    <title>hello</title>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
</head>
<body>
    <p th:text="'hello:'+${name}"></p>
</body>
</html>

       在controller中我们的写法是,这事html中便可以获得${name}便是model中添加model的属性内容。关于更多的使用方式,请移步官网:https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#what-is-thymeleaf

/**
     * 页面跳转:hello頁面
     * @return
     */
    @RequestMapping("/thymeleaf")
    public String thymeleaf(Model model){
        model.addAttribute("name","viola!");
        return "hello";
    }

三、 页面缓存

       为什么要使用页面缓存呢,对于不经常变动的页面,我们可以设置一定的缓存时间,将其缓存起来(可以缓存在redis中);页面缓存又是什么呢?页面缓存的是整个页面,我们从redis中取出整个页面显示,是不是比每次加载会更快一些呢?下面是thymeleaf使用的页面渲染技术。操作的步骤是:1.取缓存,2.手动渲染,3.输出结果。

@Resource
    ThymeleafViewResolver thymeleafViewResolver;
    /**
     * 商品列表页面
     * 优化:页面缓存
     * @return
     */
    @GetMapping(value = "/goods/to_list",produces = "text/html")
    @ResponseBody
    public String goods(HttpServletRequest request, HttpServletResponse response,Model model, MiaoShaUser user){
        model.addAttribute("user",user);
        //页面缓存
        //取缓存
        String html=redisService.get(GoodsKey.getGoodsList,"",String.class);
       
        //redis中有:直接返回使用
        if (!StringUtils.isEmpty(html)){
            return html;
        }

        //redis中没有:存
        //商品信息
        List<GoodsVo> goodsList=goodsService.listGoodsVo();
        model.addAttribute("goodsList",goodsList);
        
        //手动渲染
        WebContext cxt=new WebContext(request,response,request.getServletContext(),request.getLocale(),model.asMap());
        html=thymeleafViewResolver.getTemplateEngine().process("goods_list",cxt);
        if (!StringUtils.isEmpty(html)){
            redisService.set(GoodsKey.getGoodsList,"",html);
        }
        
        return html;
    }

四、 静态页面

       

相关标签: thymeleaf