FreeMarker实现网页静态化
1、FreeMarker实现网页静态化。
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。目前企业中:主要用Freemarker做静态页面或是页面展示。
2、使用freemarker需要的jar。
a)、把下载到的jar包(freemarker-2.3.23.jar)放到\webapp\WEB-INF\lib目录下。官方网站:http://freemarker.org/
b)、如果使用的是Maven结构,可在pom.xml中引入以下坐标。
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.</version>
</dependency>
3、Freemarker原理图。模板 + 数据模型 = 输出

4、freemarker的测试案例如下所示:
package com.taotao.freemarker; import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map; import org.junit.Test; import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException; /**
* freemarker网页静态化
*
* @ClassName: TaoTaoFreemarker.java
* @author: biehl
* @since: 2019年9月21日 下午5:46:49
* @Copyright: ©2019 biehl 版权所有
* @version: 0.0.1
* @Description:
*/
public class StaticPageFreemarker { @Test
public void freemarkerStaticPage() {
try {
// 1、创建一个模板文件
// 2、创建一个Configuration对象
Configuration configuration = new Configuration(Configuration.getVersion()); // 3、设置模板所在得路径
configuration.setDirectoryForTemplateLoading(
new File("D:\\eclipse\\workspace_taotao\\taotao-item-web\\src\\main\\webapp\\WEB-INF\\ftl")); // 4、设置模板得字符集,一般使用utf-8
configuration.setDefaultEncoding("utf-8"); // 5、使用Configuration对象加载一个模板文件,需要指定模板文件得文件名
Template template = configuration.getTemplate("hello.ftl"); // 6、创建一个数据集,可以是pojo也可以是map,推荐使用map
Map data = new HashMap<>();
data.put("hello", "hello fremarker!!!"); // 7、创建一个Writer对象,指定输出文件的路径以及文件名
Writer out = new FileWriter(new File("D:\\biehl\\photo\\out\\hello.txt")); // 8、使用模板对象的process方法输出文件
template.process(data, out); // 9、关闭流
out.close();
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
} }
}
相关文件如下所示:

5、fremarker模板的语法学习。
package com.taotao.freemarker; import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.junit.Test; import com.taotao.pojo.Student; import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException; /**
* freemarker网页静态化
*
* @ClassName: TaoTaoFreemarker.java
* @author: biehl
* @since: 2019年9月21日 下午5:46:49
* @Copyright: ©2019 biehl 版权所有
* @version: 0.0.1
* @Description:
*/
public class StaticPageFreemarker { @Test
public void freemarkerStaticPage() {
try {
// 1、创建一个模板文件
// 2、创建一个Configuration对象
Configuration configuration = new Configuration(Configuration.getVersion()); // 3、设置模板所在得路径
configuration.setDirectoryForTemplateLoading(
new File("D:\\eclipse\\workspace_taotao\\taotao-item-web\\src\\main\\webapp\\WEB-INF\\ftl")); // 4、设置模板得字符集,一般使用utf-8
configuration.setDefaultEncoding("utf-8"); // 5、使用Configuration对象加载一个模板文件,需要指定模板文件得文件名
// Template template = configuration.getTemplate("hello.ftl");
Template template = configuration.getTemplate("student.ftl"); // 6、创建一个数据集,可以是pojo也可以是map,推荐使用map
Map data = new HashMap<>();
data.put("hello", "hello fremarker!!!");
Student stu = new Student(, "小辣椒", , "北京市西城区西什库大街31号院");
// 注意,对象的key就是模板里面的对应的.前面的对象名称
data.put("student", stu); // freemarker遍历集合对象
List<Student> stuList = new ArrayList<Student>();
stuList.add(new Student(, "小辣椒1号", , "北京市西城区西什库大街30号院"));
stuList.add(new Student(, "小辣椒2号", , "北京市西城区西什库大街32号院"));
stuList.add(new Student(, "小辣椒3号", , "北京市西城区西什库大街33号院"));
stuList.add(new Student(, "小辣椒4号", , "北京市西城区西什库大街34号院"));
stuList.add(new Student(, "小辣椒5号", , "北京市西城区西什库大街35号院"));
stuList.add(new Student(, "小辣椒6号", , "北京市西城区西什库大街36号院"));
stuList.add(new Student(, "小辣椒7号", , "北京市西城区西什库大街31号院"));
data.put("stuList", stuList); // 日期类型的处理
data.put("date", new Date()); // null值得处理
data.put("val", null); // 7、创建一个Writer对象,指定输出文件的路径以及文件名
Writer out = new FileWriter(new File("D:\\biehl\\photo\\out\\student.html")); // 8、使用模板对象的process方法输出文件
template.process(data, out); // 9、关闭流
out.close();
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
} }
}
freemarker模板如下所示:
<html>
<head>
<title>测试页面</title>
</head>
<body>
<center>
<!-- )、freemarker语法-取pojo的属性 -->
学生信息:<br>
学号:${student.id}<br>
姓名:${student.name}<br>
年龄:${student.age}<br>
家庭住址:${student.address}<br><br><br>
学生列表:<br>
<table border="">
<tr>
<th>序号</th>
<th>学号</th>
<th>姓名</th>
<th>年龄</th>
<th>家庭住址</th>
</tr>
<!-- )、freemarker语法-list,历遍集合/数组, -->
<#list stuList as stu>
<!-- 逻辑运算符(==、!=、||、&&) -->
<#if stu_index%2==0>
<tr bgcolor="yellow">
<#else>
<tr bgcolor="purple">
</#if>
<!-- 获得当前迭代的索引x_index -->
<td>${stu_index}</td>
<td>${stu.id}</td>
<td>${stu.name}</td>
<td>${stu.age}</td>
<td>${stu.address}</td>
</tr>
</#list>
</table>
<br><br><br>
<!--
默认格式
)、date。
cur_time?date
)、datetime。
cur_time?datetime
)、time。
cur_time?time
)、自定义格式。
cur_time?string("yyyy-MM-dd HH:mm:ss")
-->
年:月:日:${date?date}<br>
年:月:日 时:分:秒:${date?datetime}<br>
时:分:秒:${date?time}<br>
年/月/日:${date?string("yyyy/MM/dd")}<br>
日期类型的处理:${date?string("yyyy/MM/dd HH:mm:ss")}
<br><br><br>
<!-- null值的处理、方式一:null 变 空串 -->
方式一、null值的处理:${val!}
<br>
方式二、为Null时给默认值
${val!"我是默认值"}
<br>
方式三、使用if判断null值:
<#if val??>
val是有值的.
<#else>
val值为null.
</#if>
<br><br><br>
<!-- 将另一个页面引入本页面时可用以下命令完成 -->
include标签测试:
<#include "hello.ftl">
</center>
</body>
</html>
效果如下所示:

6、freemarker与spring整合。由于使用的maven项目,所以引入相应的依赖jar包。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1..RELEASE</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.</version>
</dependency>
在ApplicationContext.xml中添加如下内容:
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/freemarker/" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
整合代码实现如下所示:
package com.taotao.item.controller; import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import freemarker.template.Configuration;
import freemarker.template.Template; /**
*
* @ClassName: HtmlGenController.java
* @author: biehl
* @since: 2019年9月26日 下午8:15:01
* @Copyright: ©2019 biehl 版权所有
* @version: 0.0.1
* @Description:
*/
@Controller
public class HtmlGenController { @Autowired
private FreeMarkerConfigurer freeMarkerConfigurer; @RequestMapping("/genhtml")
@ResponseBody
public String genHtml() throws Exception {
// 生成静态页面
Configuration configuration = freeMarkerConfigurer.getConfiguration();
Template template = configuration.getTemplate("hello.ftl");
Map data = new HashMap<>();
data.put("hello", "spring freemarker test");
Writer out = new FileWriter(new File("D:/test.html"));
template.process(data, out);
out.close();
// 返回结果
return "OK";
} }
待续......
FreeMarker实现网页静态化的更多相关文章
- 【转】使用Freemarker实现网页静态化
使用Freemarker实现网页静态化 2017年08月20日 20:45:51 阅读数:1981 1.1. 什么是freemarker FreeMarker是一个用Java语言编写的模板引擎,它基于 ...
- JAVAEE——宜立方商城10:使用freemarker实现网页静态化、ActiveMq同步生成静态网页、Sso单点登录系统分析
1. 学习计划 1.使用freemarker实现网页静态化 2.ActiveMq同步生成静态网页 2. 网页静态化 可以使用Freemarker实现网页静态化. 2.1. 什么是freemarker ...
- 网页静态化—redis | freemarker
1. 学习计划 1.商品详情页面展示,动态展示 jsp + redis 2.使用freemarker实现网页静态化 3.ActiveMq同步生成静态网页 两个方案对比,方案一依赖web容器,red ...
- 网页静态化技术Freemarker的详细介绍
网页静态化技术Freemarker 一.Freemarker的基本介绍 1.1为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道 ...
- 网页静态化解决方案-Freemarker demo+语法
1.网页静态化技术Freemarker 1.1为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说 ...
- 网页静态化技术--Freemarker入门
网页静态化技术:为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说,至少几百万个商品,每个商品又 ...
- 网页静态化解决方案-Freemarker
1.1 技术简介与使用 1.1.1 简介 为什么使用: 1. 减轻数据库的访问压力,静态化比较适合大规模且相对变化不太频繁的数据: 2. 有利于SEO(搜索引擎优化); 纯的HTML ...
- 网页静态化技术Freemarker
1.为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说,至少几百万个商品,每个商品又有大量的信息 ...
- 网页静态化解决方案Freemarker
序言: 沉淀了三个月,逐步将自己最近两年在公司中用到的技术和知识点,重新整理归纳了下,对比以前可以发现,现在技术更新越来越快,也越来越成熟,在互联网企业,用到的技术也更先进,更领先,比如微服务.分布式 ...
随机推荐
- .NET MVC5简介(六)HttpHandler
浏览器到网站程序 上一篇中,介绍IHttpModule的时候,自定义一个类CustomHttpModule继承自IHttpModule,自定义一个事件,并配合配置文件,就可以执行自定义Module中的 ...
- python基础(7):基本数据类型二(list、tuple)、range
1. 列表 1.1 列表的介绍 列表是python的基础数据类型之⼀,其他编程语⾔也有类似的数据类型.比如JS中的数组, java中的数组等等.它是以[ ]括起来,每个元素⽤','隔开⽽且可以存放各种 ...
- java基础(23):字节流、字符流
1. 字节流 在前面的学习过程中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现在我们就要开始给文件中写数据,或者读取文件中的数据. 1.1 字节输出流OutputStream Out ...
- SpringBoot(十一):SpringBoot整合Redis
详解springboot整合redis:https://blog.csdn.net/qq_36781505/article/details/86612988 一.环境准备 Redis-x64-3.2. ...
- SQL 注入漏洞浅研究学习
SQL注入漏洞:Web安全方面最高危的漏洞,SQL漏洞威胁着网站后台数据的安全问题. 网上常说“万能密码”,这个万能密码则就是利用了SQL注入漏洞: ' or 1=1 -- 上述的万能密码输入在用户登 ...
- Android框架之EventBus的使用
简介 EventBus是由greenrobot组织贡献的一个Android事件发布/订阅的轻量级框架.EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用 ...
- SpringBoot+Thyemelaf开发环境正常,打包jar发到服务器就报错Template might not exist or might not be accessible
这里说一下Thyemelaf的巨坑 写了一个SpringBoot+Thyemelaf的项目,并不是前后端分离.今天想放到linux服务器上玩玩,打成jar包,然后一运行他妈居然报错了,报了一个Temp ...
- Python—基本数据类型
核心数据类型: 数字(int整型.float浮点型.complex复数.bool布尔型) 字符串 str 列表(List) 元组(Tuple) 字典(Dictionary) 集合() 数字 整数,浮点 ...
- jsp页面格式化时间 fmt:formatDate格式化日期
使用fmt函数需在jsp中引入 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" ...
- fiddler---Fiddler抓取https协议
上一篇简单的介绍了Fiddler的使用方法和页面布局介绍,Fiddler默认抓取的是HTTP协议,现在的协议基本上都是基于HTTPS协议的,今天写一篇如何通过Fiddler抓取HTTPS协议 什么是H ...