zoukankan      html  css  js  c++  java
  • thymeleaf的手动渲染HTML模板

    thymeleaf的手动渲染HTML模板

    现在很多公司都在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)
     */
  • 相关阅读:
    作业5

    Linux系统管理4
    作业
    递归训练1:在两个长度相等的排序数组中找到上中位数
    LeetCode:面试题 08.05. 递归乘法
    LeetCode:面试题 08.06. 汉诺塔问题
    LeetCode:22. 括号生成
    如何仅用递归函数和栈操作逆序一个栈
    LeetCode:面试题 03.02. 栈的最小值
  • 原文地址:https://www.cnblogs.com/yelanggu/p/13428212.html
Copyright © 2011-2022 走看看