freemarker实现网页静态化

一.什么freemarker  

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

目前企业中:主要用Freemarker做静态页面或是页面展示.

二.使用方法

  maven工程添加依赖 

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

 

使用步骤:

第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。

第二步:设置模板文件所在的路径。

第三步:设置模板文件使用的字符集。一般就是utf-8.

第四步:加载一个模板,创建一个模板对象。

第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map

第六步:创建一个Writer对象,一般创建一FileWriter对象,指定生成的文件名。

第七步:调用模板对象的process方法输出文件。

第八步:关闭流。

   

@Test
    public void genFile() throws Exception {
        // 第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。
        Configuration configuration = new Configuration(Configuration.getVersion());
        // 第二步:设置模板文件所在的路径。
        configuration.setDirectoryForTemplateLoading(new File("D:/workspaces-itcast/term197/e3-item-web/src/main/webapp/WEB-INF/ftl"));
        // 第三步:设置模板文件使用的字符集。一般就是utf-8.
        configuration.setDefaultEncoding("utf-8");
        // 第四步:加载一个模板,创建一个模板对象。
        Template template = configuration.getTemplate("hello.ftl");
        // 第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。
        Map dataModel = new HashMap<>();
        //向数据集中添加数据
        dataModel.put("hello", "this is my first freemarker test.");
        // 第六步:创建一个Writer对象,一般创建一FileWriter对象,指定生成的文件名。
        Writer out = new FileWriter(new File("D:/temp/term197/out/hello.html"));
        // 第七步:调用模板对象的process方法输出文件。
        template.process(dataModel, out);
        // 第八步:关闭流。
        out.close();
    }

三.模板中的语法

  1.访问map中的value

  假设有一个map {“age”:18,“name”:“小明”}取出其中的属性则为${age},${name}来取集合的value

  2.访问对象中的属性

  假设有一个people对象,内部有age,和name属性.${stu.age},${stu.name} 和s标签一样,

  

  3.集合的遍历

<#list peopleList as people>
    ${people.age}
    ${people.name}
</#list>

 

  4.循环过程中取下标

<#list peopleList as people>
    ${people_index}
</#list>

 

  5.判断 

<#if 判断条件>
     if成立执行的代码
  <#else>
     if不成立执行的代码
</#if>

 

  6.空值处理

  if处理null值

  <#if 取出的值??>  比如<#if student??> if 标签内取值不加$符号

    不为空值时的代码

    <#else>

    为空值的代码

  </#if> 

  第二种处理方式:

  ${取值!"如果是空显示的值"}

  取值后再后面加上!号,然后引号内为如果是空值显示的值.

  7.时间显示格式化

  ${data?data}

  ${time}

  ${data?datatime}

  ${data?string(yyyy/MM/dd:HH:mm:ss)} 格式化日期

  8.include标签的使用

  <#include "模板名称" >

  

 四.freemarker和Spring的整合

  导包Freemarker的jar包

    

   整合Spring的配置文件

  

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
  
    <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>


</beans>

业务逻辑:

1、spring容器中获得FreeMarkerConfigurer对象。

2、FreeMarkerConfigurer对象中获得Configuration对象。

3、使用Configuration对象获得Template对象。

4、创建数据集

5、创建输出文件的Writer对象。

6、调用模板对象的process方法,生成文件。

7、关闭流。

加载配置文件web.xml

 

 

@Controller
public class HtmlGenController {
    
    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;

    @RequestMapping("/genhtml")
    @ResponseBody
    public String genHtml()throws Exception {
        // 1、从spring容器中获得FreeMarkerConfigurer对象。
        // 2、从FreeMarkerConfigurer对象中获得Configuration对象。
        Configuration configuration = freeMarkerConfigurer.getConfiguration();
        // 3、使用Configuration对象获得Template对象。
        Template template = configuration.getTemplate("hello.ftl");
        // 4、创建数据集
        Map dataModel = new HashMap<>();
        dataModel.put("hello", "1000");
        // 5、创建输出文件的Writer对象。
        Writer out = new FileWriter(new File("D:/temp/term197/out/spring-freemarker.html"));
        // 6、调用模板对象的process方法,生成文件。
        template.process(dataModel, out);
        // 7、关闭流。
        out.close();
        return "OK";
    }
}

 

 

posted @ 2018-08-25 11:18  流浪的小蛤蟆  阅读(390)  评论(0)    收藏  举报