• freemark基础知识


    前言:使用freemarker对应生成一个html文件,保存到磁盘,访问文件就不一定使用tomcat,可以使用nginx(http服务器)访问。可以使用freemaker工具生成。只生成一次,html静态页面是实实在在存在磁盘上了。

    一、 什么是freemarker

    FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。

    二、 Freemarker的使用方法

    第一步:把freemarker的jar包添加到工程中

    第二步:freemarker的运行不依赖web容器,可以在java工程中运行。创建一个测试方法进行测试。

    第三步:创建一个Configration对象

    第四步:告诉config对象模板文件存放的路径。

    第五步:设置config的默认字符集。一般是utf-8

    第六步:从config对象中获得模板对象。需要指定一个模板文件的名字。

    第七步:创建模板需要的数据集。数据集可以是一个map对象也可以是一个pojo,把模板需要的数据都放入数据集。

    第八步:创建一个Writer对象,指定生成的文件保存的路径及文件名。

    第九步:调用模板对象的process方法生成静态文件。需要两个参数数据集和writer对象。

    第十步:关闭writer对象。

     代码实现(数据源)

    public class FreeMarkerTest {

     

         @Test

         public void testFreeMarker() throws Exception {

             // 第一步:把freemarker的jar包添加到工程中

             // 第二步:freemarker的运行不依赖web容器,可以在java工程中运行。创建一个测试方法进行测试。

             // 第三步:创建一个Configuration对象

             Configuration configuration = new Configuration(Configuration.getVersion());

             // 第四步:告诉config对象模板文件存放的路径。

             configuration.setDirectoryForTemplateLoading(new File("D:\workspaces-itcast\JaveEE18\taotao-portal\src\main\webapp\WEB-INF\ftl"));

             // 第五步:设置config的默认字符集。一般是utf-8

             configuration.setDefaultEncoding("utf-8");

             // 第六步:从config对象中获得模板对象。需要制定一个模板文件的名字。

             Template template = configuration.getTemplate("first.ftl");

             // 第七步:创建模板需要的数据集。可以是一个map对象也可以是一个pojo,把模板需要的数据都放入数据集。

             Map root = new HashMap<>();

             root.put("hello", "hello freemarker");

             // 第八步:创建一个Writer对象,指定生成的文件保存的路径及文件名。

             Writer out = new FileWriter(new File("D:\temp\html\hello.html"));

             // 第九步:调用模板对象的process方法生成静态文件。需要两个参数数据集和writer对象。

             template.process(root, out);

             // 第十步:关闭writer对象。

             out.flush();

             out.close();

         }

    }

    模板中的内容:

    ${hello}

    三、Freemarker模板的写法

    1、取简单数据类型数据

    使用EL表达式。

    ${hello}

    2、包装数据类型

    模板:

    <html>

    <head>

          <title>${title}</title>

    </head>

    <body>

          <label>学号:</label>${student.id}<br>

          <label>姓名:</label>${student.name}<br>

          <label>住址:</label>${student.address}<br>

    </body>

    </html>

    3、 历遍集合/数组

    List<Person> persons = new ArrayList<Person>();

    省略….

    页面中内容 

    <#list persons as p>   数据集(persons) 对象(p)

    ${p.id}/${p.name}

    </#list>

    4、 获得当前迭代的索引(循环中取下标)

    List<Person> list = new ArrayList<Person>();

    获取当前选代的索引:<br/>

    <#list persons as p>

           ${p_index}     // p_index取下标

    </#list>

    5、 模板中判断条件

    <#if 判断条件>

    <#else>

    </#if>

    逻辑运算符(==   !=   ||   &&)

    6、日期类型格式化

    默认格式

    1:date     生成的日期格式1

    ${cur_time?date}   ?date告诉freemarker要生成的日期格式

    2:datetime    生成的日期格式2

    ${cur_time?datetime}

    3:time        生成的日期格式3

    ${cur_time?time}

     自定义格式 

    ${cur_time?string("yyyy-MM-dd HH:mm:ss")} 

    7、 处理null值

    root.put(“val”,null);

    解决办法

    1:null 变空串

    ${val!}     ${val!"这里是空"}    !后面是默认值 加上!可以处理title为空值的情况 为了日后能理解  可以使用“”,在里面添加说明文字

    2:为Null时给默认值

    ${val!“我是默认值"}

    3、如果日期为空<#if curdate ??>      ??代表满足的情况下

           当前日期:${curdate?string("yyyy/MM/dd HH:mm:ss")}

           <#else>

           curdate属性为null

           </#if>

     8、Include

    将另一个页面引入本页面时可用以下命令完成,.ftl并不是必须的,只要能把文件引入就行,这样显规范

     <#include "/include/head.html">

    三、项目中使用freemarker

    使用freemarker整合spring。把Configuration交给spring容器管理。

    依赖的jar包:

    <dependency>

           <groupId>org.springframework</groupId>

           <artifactId>spring-context-support</artifactId>

           <version>4.1.3.RELEASE</version>

    </dependency>

    <dependency>

           <groupId>org.freemarker</groupId>

           <artifactId>freemarker</artifactId>

           <version>2.3.23</version>

    </dependency>

    1.2.1   Spring配置文件

    <bean id="freemarkerConfig"

             class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">

             <property name="templateLoaderPath" value="/WEB-INF/ftl/" />

             <property name="defaultEncoding" value="UTF-8" />

         </bean>

  • 相关阅读:
    Java多态的学习
    Java显示的静态初始化和非静态实例初始化
    Java类方法访问权限
    JavaScript数组详解
    JavaScript倒计时的具体实现
    JavaScript之Date对象
    JavaScript内置对象之Math对象
    JavaScript对象
    JS的作用域,作用域链及预解析
    JavaScript函数
  • 原文地址:https://www.cnblogs.com/kelly-one/p/7392283.html
Copyright © 2020-2023  润新知