freemarker页面静态化
1、工程结构

2、
Student
public class Student {
private int id;
private String name;
private String address;
public Student() {}
public Student(int id, String name, String address) {
super();
this.id = id;
this.name = name;
this.address = address;
}
// getter和setter方法省略
}
StudentExt
public class StudentExt {
private String title;
private Student student;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}
FreeMarkerTest
package com.test; import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.junit.Test; import com.pojo.Student;
import com.pojo.StudentExt; import freemarker.template.Configuration;
import freemarker.template.Template; public class FreeMarkerTest {
@Test
public void testFreeMarker() throws Exception {
Template template = getTemplate("first.ftl"); // 第七步:创建模板需要的数据集。可以是一个map对象也可以是一个pojo,把模板需要的数据都放入数据集。
Map<String, Object> root = new HashMap<>();
root.put("hello", "hello freemarker");
// 第八步:创建一个Writer对象,指定生成的文件保存的路径及文件名。
Writer out = new FileWriter(new File("D:\\temp\\html\\first.html"));
// 第九步:调用模板对象的process方法生成静态文件。需要两个参数数据集和writer对象。
template.process(root, out);
// 第十步:关闭writer对象。
out.flush();
out.close();
} @Test
public void testFreeMarker2() throws Exception {
Template template = getTemplate("second.ftl"); // 第七步:创建模板需要的数据集。可以是一个map对象也可以是一个pojo,把模板需要的数据都放入数据集。
StudentExt s = new StudentExt();
s.setTitle("生成静态网页");
Student stu = new Student();
stu.setId(1);
stu.setName("张三");
stu.setAddress("深圳南山软件园");
s.setStudent(stu); // 第八步:创建一个Writer对象,指定生成的文件保存的路径及文件名。
Writer out = new FileWriter(new File("D:\\temp\\html\\second.html"));
// 第九步:调用模板对象的process方法生成静态文件。需要两个参数数据集和writer对象。
template.process(s, out);
// 第十步:关闭writer对象。
out.flush();
out.close();
} @Test
public void testFreeMarker3() throws Exception {
Template template = getTemplate("模板3.ftl"); // 第七步:创建模板需要的数据集。可以是一个map对象也可以是一个pojo,把模板需要的数据都放入数据集。
Map<String, Object> root = new HashMap<>();
Student stu = new Student(1001, "张三", "地球");
Student stu2 = new Student(1002, "李四", "火星");
Student stu3 = new Student(1003, "小明", "不详");
Student stu4 = new Student(1004, "小明", "不详");
Student stu5 = new Student(1005, "小明", "不详");
Student stu6 = new Student(1006, "小明", "不详");
List<Student> studentList = new ArrayList<>();
studentList.add(stu);
studentList.add(stu2);
studentList.add(stu3);
studentList.add(stu4);
studentList.add(stu5);
studentList.add(stu6); root.put("title", "hello freemarker");
root.put("student", stu);
root.put("studentList", studentList); // 第八步:创建一个Writer对象,指定生成的文件保存的路径及文件名。
Writer out = new FileWriter(new File("D:\\temp\\html\\静态页面3.html"));
// 第九步:调用模板对象的process方法生成静态文件。需要两个参数数据集和writer对象。
template.process(root, out);
// 第十步:关闭writer对象。
out.flush();
out.close();
} private Template getTemplate(String templateFileName) throws Exception {
// 第一步:把freemarker的jar包添加到工程中
// 第二步:freemarker的运行不依赖web容器,可以在java工程中运行。创建一个测试方法进行测试。
// 第三步:创建一个Configuration对象
Configuration configuration = new Configuration(Configuration.getVersion());
// 第四步:告诉config对象模板文件存放的路径。
configuration.setDirectoryForTemplateLoading(
new File("D:\\oy_workspace\\eclipse_javaee_win64_workspace\\test_freemarker\\ftl"));
// 第五步:设置config的默认字符集。一般是utf-8
configuration.setDefaultEncoding("utf-8");
// 第六步:从config对象中获得模板对象。需要制定一个模板文件的名字。
// eclipse不支持*.ftl文件,可以将第三方提供的插件freemarker-ide-0.9.14复制到eclipse的dropins目录下
Template template = configuration.getTemplate(templateFileName); return template;
}
}
first.ftl
${hello}
second.ftl
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>${title}</title>
</head>
<body>
<label>学号:</label>${student.id}<br>
<label>姓名:</label>${student.name}<br>
<label>住址:</label>${student.address}<br>
</body>
</html>
模板3.ftl
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>${title}</title>
</head>
<body>
<label>学号:</label>${student.id}<br>
<label>姓名:</label>${student.name}<br>
<label>住址:</label>${student.address}<br>
</body>
列表展示:
<table border="1" bordercolor="blue" cellspacing="0" width="50%">
<th>
<td align="center">学号</td>
<td align="center">姓名</td>
<td align="center">住址</td>
</th>
<#list studentList as stu>
<#if stu_index%2==0>
<tr style="color:red">
<#else>
<tr>
</#if>
<td align="center">${stu_index}</td>
<td align="center">${stu.id}</td>
<td align="center">${stu.name}</td>
<td align="center">${stu.address}</td>
</tr>
</#list>
</table>
</html>
freemarker页面静态化的更多相关文章
- FreeMarker 页面静态化解决方案
一.网页的静态化方案 1.生成静态页面的时机:在做添加操作时,同时生成该新增内容的对应的静态页面 2.静态页面的名称:内容 id + ".html" 3.静态页面所在的路径:工程外 ...
- Freemarker页面静态化技术,activemq监听页面变动
初步理解: 架构优化: 静态页面的访问速度优于从缓存获取数据的动态页面的访问速度: Freemarker: 导包 模板:hello.ftl <!DOCTYPE html> <html ...
- Freemarker 页面静态化技术使用入门案例
在访问 新闻.活动.商品 详情页面时, 路径可以是 xx[id].html, 服务器端根据请求 id, 动态生成 html 网页,下次访问数据时,无需再查询数据,直接将 html 静态页面返回.这样一 ...
- 页面静态化技术Freemarker技术的介绍及使用实例.
一.FreeMarker简介 1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效 ...
- Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化
模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则 ...
- JavaWeb页面静态化之使用freemarker模板生成一个html静态页面
题外话: 页面静态化(展示数据从JSP页面变成HTML页面)实现方式-->模板技术 从本质上来讲,模板技术是一个占位符动态替换技术.一个完整的模板技术需要四个元素:①模板语言(使 ...
- SpringBoot2 整合FreeMarker模板,完成页面静态化处理
本文源码:GitHub·点这里 || GitEE·点这里 一.页面静态化 1.动静态页面 静态页面 即静态网页,指已经装载好内容HTML页面,无需经过请求服务器数据和编译过程,直接加载到客户浏览器上显 ...
- freemark 页面静态化
1. 页面静态化是什么? 页面静态化有非常多含义,在WEB开发中.静态网页一般理解为站点中大部分超级链接所引用的页面是单独的HTML静态页面文件(如.htm..html等页面文件,html语言本身是静 ...
- fastDFS shiro权限校验 redis FreeMark页面静态化
FastDFS是一个轻量级分布式文件系统, 使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传.下载等服务 FastDFS服务端有两个角色:跟踪器(tracker)和存储节点( ...
随机推荐
- php双向队列的实现
队列是一种线性表,按照先进先出的原则进行 单向队列:只能从头进,从尾出 双向队列:头尾都可以进出 class DuiLie { private $array = array();//声 ...
- 【Life】 今天的思考
今天一个实习生来问我问题,他要用python操作outlook发送邮件,代码是从网上找的. 在其他人的电脑上可以成功运行,但在他的电脑上就失败. 处理过程 (1)我查看了他method里的代码, 发现 ...
- 杭电2019多校第一场,Problem I,String 2019
题目描述 Tom has a string containing only lowercase letters. He wants to choose a subsequence of the str ...
- Java EE HttpServletRequest接口和HttpServletResponse接口
package javax.servlet.http (https://docs.oracle.com/javaee/7/api/javax/servlet/http/package-summary. ...
- 带她来看Frozen 2
- O053、Attach Volume 操作(Part I)
参考https://www.cnblogs.com/CloudMan6/p/5624930.html Volume的最主要用途是做为虚拟磁盘提供给Instance使用.Volume是通过 Atta ...
- Laravel 实现指定用户下的设备分页(与查询指定分类下的文章原理相同)
<?php //控制器 namespace App\Http\Controllers\Api\User; use App\Http\Controllers\Controller; use Ill ...
- JavaScript函数尾调用与尾递归
什么是函数尾调用和尾递归 函数尾调用与尾递归的应用 一.什么是函数的尾调用和尾递归 函数尾调用就是指函数的最后一步是调用另一个函数. //函数尾调用示例一 function foo(x){ retur ...
- 跨平台编译ceres for Android
折腾了几乎一天,记录一下. 最大的坑是官网给出的 1.进入ceres源代码目录下的jni目录 2.EIGEN_PATH="指向eigen库目录,即包含EIGEN文件夹的那个文件夹” ndk- ...
- Linux 永久挂载镜像文件和制作yum源
Linux mount命令是经常会使用到的命令,它用于挂载Linux系统外的文件. 1.镜像挂载到系统指定目录下:[root@master cdrom]# mount -t auto /mnt/c ...