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

Freemark快速入门

程序员文章站 2024-01-14 19:55:28
...

  因为我负责的模块中要使用到freemark,所以我就来学习freemark了,但是在网上找了很多学习资料,蹲了很多的坑,所以决定自己写一篇关于freemark入门的帖子,就当巩固印象把...

  进入正题,我们先来讲讲什么是Freemark,

FreeMarker是一个用Java语言编写的模板引擎,它基于模板输出文本(html)。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。
本质其实就是一个  jar  ->  生产静态的HTML文件,
在这提一下另一个技术,thymeleaf 好像也挺火的,,不过我这没有时候,因为thymeleaf开了缓存不稳定等因素,有兴趣的小伙伴
可以研究一下
 

Freemark原理

Freemark快速入门


嗯,闲话不多讲,我们来讲讲使用把.....

  创建一个maven工程,,

    Freemark快速入门

 

  
pom文件添加依赖

<dependency>
   <groupId>org.freemarker</groupId>
   <artifactId>freemarker</artifactId>
   <version>2.3.23</version>
    </dependency>


然后我们来看测试代码,(下载模板功能模拟)

  @Test
    public void test_fun01() throws Exception {
        //1.创建个configuration对象
        Configuration config = new Configuration(Configuration.getVersion());

        //2.设置模板所在的文件  this.getClass().getResource("/").toString()  resources 目录
        config.setDirectoryForTemplateLoading(new File(this.getClass().getResource("/").toString()));

        //3.设置模板文件的字符集
        config.setDefaultEncoding("UTF-8");

        //4.首先创建模板文件,再加载模板文件 模板文件的后缀官方提供是.ftl 其实任何类型都行。
        Template template = config.getTemplate("sayHello.ftl");//模板我们之后再创建


        //5.创建模板文件需要展示数据的数据集对象,可以使用POJO,也可以使用map 一般是使用map
        Map map = new HashMap();
        map.put("name","zs");
        map.put("age",18);

        //6.创建一个FileWriter对象 指定生成的静态文件的文件路径及文件名
        FileWriter writer = new FileWriter(new File("D:\\csdn\\freemark\\" + map.get("name") + ".html"));//下载文件

        //7.调用模板对象的process方法,执行输出文件。
        template.process(map,writer);
        
//        关闭流
        writer.close();
    }


嗯,我们在resources目录下创建一个 sayHello.ftl模板文件

Freemark快速入门

   嗯,语法的话跟 el表达式差不多的, ${} 就是取值的功能,就不多讲了,我们看看运行结果..

Freemark快速入门



  嗯,我们看看生成的模板,,

            

Freemark快速入门


 打开后效果图,

 Freemark快速入门


 嗯,其实freemark也没什么好讲的了,我们就讲一些语法把,,,


if 判断:

  Freemark快速入门

 

然后我们再运行一遍刚刚的代码,,输出了大于15了,

Freemark快速入门


 

  嗯,然后我们试试获取对象中的属性值,,


 1.创建一个pojo,为了测试freemark是怎么取值的,我们在get方法打印一句话

  

public class Cat {
    
     private String name;
    
     private String habby;

     public String getName() {
        
         System.out.println("调用了getName方法,,,,,");
         return name;
     }

     public void setName(String name) {
         this.name = name;
     }

     public String getHabby() {
         return habby;
     }

     public void setHabby(String habby) {
         this.habby = habby;
     }
 }

  2.然后我们在创建模板的代码中设置一些pojo

Freemark快速入门


 3.修改sayHello.ftl模板

Freemark快速入门

然后我们再运行生成模板的代码,方法输出如下

Freemark快速入门


生成的网页如下...

Freemark快速入门



嗯,我们再讲讲循环的使用把,,

  生成模板的代码中添加一个list

Freemark快速入门

  修改ftl文件,

   list是集合,person是遍历的值(person_index是获取循环中的索引)

 Freemark快速入门

运行代码后效果如下,

  Freemark快速入门

 

  其实讲到这就以及没什么好讲的了,,,最后我们讲一下遍历map把,,

   Freemark快速入门

  模板

    Freemark快速入门

  

  效果

   Freemark快速入门


  

  恩赫,顺便再讲一下日期类型的数据怎么处理的把,

    我们先演示正常的获取值的方式,

   Freemark快速入门

    模板获取

    Freemark快速入门

生成模板代码运行

     扔出异常如下

 Freemark快速入门


  我们使用freemark给出的提示解决,,

    修改模板代码

    Freemark快速入门

   运行生成代码:

   效果如下

   Freemark快速入门


  内容真的感觉是越讲越多,,,,又想起要讲的东西了,,,,

处理null字符串

  如果表达式获取的值是null,那么就会报错,我就不演示了,,这里就讲讲解决方案

 解决方案1.

  使用if判断null值,,


Freemark快速入门

 

Freemark快速入门 

效果:

  Freemark快速入门


 方案2:

  左边模板图,右边效果图

  Freemark快速入门

  !的意思是 , 如果 第一个值是null,就使用第二个默认值,如果不写,就输出一个""字符串

好啦,以上就是freemark的一部分核心,,就讲那么多啦,,,

相关标签: freemark HelloWorld