网页静态化--Freemarker

来源:互联网 发布:淘宝被扣48分保证金 编辑:程序博客网 时间:2024/05/19 02:30

1.1 分析

每个商品要对应生成一个html文件,保存到磁盘,访问文件就不一定使用tomcat,可以使用nginx访问。

可以使用freemaker工具生成。

 

1.2 Freemarker

1.2.1 什么是freemarker

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

 

1.2.2 Freemarker的使用方法

第一步:把freemarkerjar包添加到工程中

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

第三步:创建一个Configration对象

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

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

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

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

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

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

第十步:关闭writer对象。

 

1.2.3 代码实现

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}

 

1.2.4 Freemarker模板的写法

1.2.4.1 取简单数据类型数据

使用EL表达式。

${hello}

 

1.2.4.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>

 

1.2.4.3 历遍集合/数组

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

省略.

 

页面中内容

 

<#list persons as p>

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

</#list>

 

1.2.4.4 获得当前迭代的索引

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

 

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

<#list persons as p>

${p_index}

</#list>

 

1.2.4.5 模板中判断条件

<#if 判断条件>

<#else>

</#if>

 

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

 

1.2.4.6 日期类型格式化

默认格式

1date

${cur_time?date}

2datetime

${cur_time?datetime}

3time

${cur_time?time}

 

自定义格式

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

 

1.2.4.7 处理null

root.put(val,null);

 

解决办法

1:null 变 空串

${val!}     ${val!"这里是空"}

2:Null时给默认值

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

3<#if curdate ??>

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

<#else>

curdate属性为null

</#if>

1.2.4.8 Include

将另一个页面引入本页面时可用以下命令完成

 

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

 

1.3 项目中使用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.3.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>

 

1.3.2 静态文件生成的时机

1、当用户第一次访问时生成静态文件。不推荐使用。

2、当后台添加、编辑商品时生成静态网页。

此时,需要taotao-portal发布服务,供后台系统调用,当后台添加或者修改商品时调用此服务。此时taotao-portal的功能就是生成静态页面。