thymeleaf的手动渲染HTML模板

长河 2018-11-14 11:18:10  6833  收藏 2
分类专栏: Springboot

现在很多公司都在thymeleaf作为前端的显示,但是刚看了一份博客,现在还有人在不断的诟病thymeleaf的性能问题,然后听说了一个超级牛逼的叫beetl.其实就是下面这个博客

https://my.oschina.net/xiandafu/blog/1505526?p=4

,然后看了看这个Beetl的东西,感觉确实很牛逼啊,但是不在今天的博客范围内,以后有机会可以试试,为什么我不写freemaker,因为我觉得语法太恶心,想当年,唉,真是往事不堪回首啊,我现在还觉得freemaker的语法恶心.....

言归正传:下面我们来手动渲染一段html代码和一个html页面

添加依赖:

  1.  
    <!-- Thymeleaf 模板引擎 -->
  2.  
    <dependency>
  3.  
    <groupId>org.thymeleaf</groupId>
  4.  
    <artifactId>thymeleaf</artifactId>
  5.  
    <version>3.0.9.RELEASE</version>
  6.  
    </dependency>

1.封装一个渲染的工具类:

  1.  
    import org.thymeleaf.TemplateEngine;
  2.  
    import org.thymeleaf.context.Context;
  3.  
    import java.util.Map;
  4.  
     
  5.  
    /**
  6.  
    * @author zk
  7.  
    * @Description:
  8.  
    * @date 2018-11-14 10:34
  9.  
    */
  10.  
    public class HTMLTemplateUtils {
  11.  
     
  12.  
    private final static TemplateEngine engine=new TemplateEngine();
  13.  
     
  14.  
    /**
  15.  
    * 使用 Thymeleaf 渲染 HTML
  16.  
    * @param template HTML模板
  17.  
    * @param params 参数
  18.  
    * @return 渲染后的HTML
  19.  
    */
  20.  
    public static String render(String template,Map<String,Object> params){
  21.  
    Context context = new Context();
  22.  
    context.setVariables(params);
  23.  
    return engine.process(template,context);
  24.  
    }
  25.  
     
  26.  
    }

2.测试:

  1.  
    public class Test {
  2.  
    public static void main(String[] args) {
  3.  
     
  4.  
    String template = "<p th:text='${title}'></p>";
  5.  
    HashMap<String, Object> map = new HashMap<>();
  6.  
    map.put("title","hello world");
  7.  
    String render = HTMLTemplateUtils.render(template, map);
  8.  
    System.out.println("渲染之后的字符串是:"+render);
  9.  
     
  10.  
    }
  11.  
    }

这里运行后会输出:渲染之后的字符串是:<p>hello world</p>

达到了我们想要的渲染的效果,其实就是一个字符串的替换.....

下面我们渲染一个html文件.准备一个 example.html  放在resources下面

  1.  
    <!DOCTYPE html>
  2.  
    <html lang="en">
  3.  
    <head>
  4.  
    <meta charset="UTF-8">
  5.  
    <title>Title</title>
  6.  
    </head>
  7.  
    <body>
  8.  
    <h1 th:text="${name}">列表名称</h1>
  9.  
    <ul>
  10.  
    <li th:each="item: ${array}" th:text="${item}">条目</li>
  11.  
    </ul>
  12.  
    </body>
  13.  
    </html>

写一个测试的类:

  1.  
    public class HTMLTest2 {
  2.  
     
  3.  
    public static void main(String[] args) throws IOException {
  4.  
    ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
  5.  
    //模板所在目录,相对于当前classloader的classpath。
  6.  
    resolver.setPrefix("");
  7.  
    //模板文件后缀
  8.  
    resolver.setSuffix(".html");
  9.  
    TemplateEngine engine = new TemplateEngine();
  10.  
    engine.setTemplateResolver(resolver);
  11.  
     
  12.  
    //构造上下文(Model)
  13.  
    Context context = new Context();
  14.  
    context.setVariable("name", "三国人物");
  15.  
    context.setVariable("array", new String[]{"曹操", "刘备", "孙权", "汉献帝"});
  16.  
     
  17.  
    //渲染模板
  18.  
    FileWriter writer = new FileWriter("result.html");
  19.  
    engine.process("example",context,writer);
  20.  
     
  21.  
    //这个example.html 放在resources 下面.这样机会生成一个result.html文件,结果都已经放进去了.
  22.  
     
  23.  
     
  24.  
    }
  25.  
    }

我们这里把渲染后的结果到result.html 中

运行程序就会生成一个result.html 内容是:

  1.  
    <!DOCTYPE html>
  2.  
    <html lang="en">
  3.  
    <head>
  4.  
    <meta charset="UTF-8">
  5.  
    <title>Title</title>
  6.  
    </head>
  7.  
    <body>
  8.  
    <h1>三国人物</h1>
  9.  
    <ul>
  10.  
    <li>曹操</li>
  11.  
    <li>刘备</li>
  12.  
    <li>孙权</li>
  13.  
    <li>汉献帝</li>
  14.  
    </ul>
  15.  
    </body>
  16.  
    </html>

也可以手动的渲染web请求来的,下次咱们再补充上来.敬请期待

其实渲染最后都是调用的这个方法:

/**
* org.thymeleaf.templateparser.ITemplateParser#parseStandalone(org.thymeleaf.IEngineConfiguration, java.lang.String, java.lang.String, java.util.Set, org.thymeleaf.templateresource.ITemplateResource, org.thymeleaf.templatemode.TemplateMode, boolean, org.thymeleaf.engine.ITemplateHandler)
*/

thymeleaf的手动渲染HTML模板的更多相关文章

  1. springboot整合thymeleaf手动渲染

    Thymeleaf手动渲染 为提高页面访问速度,可缓存html页面,客户端请求从缓存获取,获取不到再手动渲染 在spring4下 @Autowired ThymeleafViewResolver th ...

  2. Thymeleaf+SpringMVC,如何从模板中获取数据

    Thymeleaf+SpringMVC,如何从模板中获取数据 在一个典型的SpringMVC应用中,带@Controller注解的类负责准备数据模型Map的数据和选择一个视图进行渲染.这个模型Map对 ...

  3. node 渲染html模板配置

    node 渲染html模板配置 安装swig模块 npm install swig--save - dev 加载swig模块 var swig = require('swig'); 模板配置 //第一 ...

  4. Thymeleaf+SpringMVC,如何从模板中获取数据(转)

    在一个典型的SpringMVC应用中,带@Controller注解的类负责准备数据模型Map的数据和选择一个视图进行渲染.这个模型Map对视图进行完全的抽象,在使用Thymeleaf的情况下,它将是一 ...

  5. 【Thymeleaf】浅谈Java模板引擎(带更新...)

    什么是模板引擎 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. 为什么要用模板 ...

  6. Django初探(模板渲染、模板语音、simple_tag、母版子版、静态配置文件)

    一.首先我们用PyCharm来创建一个Django项目 终端命令:django-admin startproject sitename 图形创建:   这样一个Django项目就创建完成了,上面可以看 ...

  7. Django学习笔记之模板渲染、模板语言、simple_tag、母版子版、静态配置文件

    一.首先我们用PyCharm来创建一个Django项目 终端命令:django-admin startproject sitename 图形创建:   这样一个Django项目就创建完成了,上面可以看 ...

  8. 手动开发PHP模板引擎 一 (35)

    模板叫做TPL,模仿于smarty模板引擎. 我们所说的模板是Web模板,是主要由HTML标记组成的语言来编写的页面,但也有如何表示包含动态生成内容的方式(解析标签).模板引擎是一种软件库,允许我们从 ...

  9. layui表格渲染中模板的使用举例

    实例一: { field: 'status', align: 'center', title: '活动状态', templet: function (d) { if (d.status == &quo ...

  10. (八)Thymeleaf的 th:* 属性之—— 模板布局& th:with& 属性优先级

    3.7 模板布局 模板名称:layout.html 3.7.1 th:fragment e.g.模板名为footer.html页面body部分如下: <body> <div th:f ...

随机推荐

  1. 精橙FPGA,一个承接FPGA代码设计的资深工程师团队。

    一.我们是谁 精橙FPGA,一个承接FPGA代码设计的资深工程师团队. 二.服务内容 面向在校学生.职场工程师等人员,提供FPGA入门指导和FPGA代码设计外包服务. 三.业务范围 主要提供Xilin ...

  2. 【论文系列】PPO知识点梳理 (尽我可能细致通俗理解!)

    零.题记 这篇博客一方面为了记录当前的知识点,另一方面PPO算法实在是太重要了,不但要从理论上理解它到底是怎样实现的,还需要从代码方面进行学习和记录,这里我就通俗的将这个知识点进行简单的记录,用来日后 ...

  3. NATS: 自定义服务 (Service)

    使用 NATS 服务框架来创建服务会变得非常简单,基于 NATS 的服务框架,NAST 的客户端库可以更简单的构建.服务发现和监控服务.服务框架自动将所有的订阅归类到一个队列组中,提供构建基于层次化的 ...

  4. 藏不住了,这届数字打工人(RPA)想在各行各业“当骨干”!

    数字化时代,最红的"打工人"是谁? 无疑,是RPA(数字化劳动力). 这种由机器人流程自动化+AI驱动,模拟人点击.移动鼠标等在电脑上的操作,在各种规则明确.高重复度业务场景中代替 ...

  5. 利用openssl生成SM2公私钥对

      openssl 1.1.1+ 版本增加了对SM2 的支持,所以我们就能直接使用这些版本的opsnssl 生成 SM2的公私钥对. 首先我们得在Linux 或者Windows服务器中安装对应版本的o ...

  6. NetCore开源项目,适合新手学习

    VerEasy.Core 介绍 这是一个基于 .NET Core 的易开发的框架,附 vue3前端框架.提供了一个高效可扩展的API程序. 支持 JWT 认证.数据库操作.日志记录.异步处理等特性,能 ...

  7. [转]C#从MySQL数据库中读取

    实现了数据库的建表.存储数据的功能后,还需要实现数据库的读取,综合查资料后发现有两种发发比较好; 一.如需要界面操作,需要将数据表格在界面上显示出来的话,需要使用DataGrid控件. 基本操作流程: ...

  8. nginx升级与版本回退

    ginx官网下载安装包http://nginx.org/en/download.html 查看nginx文件或目录find / -name nginx 2>/dev/null 查看已安装的 Ng ...

  9. 老奶奶看了都会的WSL2连接USB设备教程!

    老奶奶看了都会的WSL2-Ubuntu连接USB设备教程! 作者:SkyXZ CSDN:SkyXZ--CSDN博客 博客园:SkyXZ - 博客园 参考资料:微软官方文档连接 USB 设备 | Mic ...

  10. SpringCloud Alibaba(四) - Nacos 配置中心

    1.环境搭建 1.1 依赖 <!-- nacos注册中心 注解 @EnableDiscoveryClient --> <dependency> <groupId>c ...