Freemark快速入门

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

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

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

Freemark原理



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

  创建一个maven工程,,

    

 

  
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模板文件


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




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

            


 打开后效果图,

 


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


if 判断:

  

 

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



 

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


 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



 3.修改sayHello.ftl模板


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



生成的网页如下...




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

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


  修改ftl文件,

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

 

运行代码后效果如下,

  

 

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

   

  模板

    

  

  效果

   


  

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

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

   

    模板获取

    

生成模板代码运行

     扔出异常如下

 


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

    修改模板代码

   

   运行生成代码:

   效果如下

   


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

处理null字符串

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

 解决方案1.

  使用if判断null值,,



 

 

效果:

 


 方案2:

  左边模板图,右边效果图

 

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

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

猜你喜欢

转载自blog.csdn.net/qq_40794266/article/details/79241074