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页面静态化的更多相关文章

  1. FreeMarker 页面静态化解决方案

    一.网页的静态化方案 1.生成静态页面的时机:在做添加操作时,同时生成该新增内容的对应的静态页面 2.静态页面的名称:内容 id + ".html" 3.静态页面所在的路径:工程外 ...

  2. Freemarker页面静态化技术,activemq监听页面变动

    初步理解: 架构优化: 静态页面的访问速度优于从缓存获取数据的动态页面的访问速度: Freemarker: 导包 模板:hello.ftl <!DOCTYPE html> <html ...

  3. Freemarker 页面静态化技术使用入门案例

    在访问 新闻.活动.商品 详情页面时, 路径可以是 xx[id].html, 服务器端根据请求 id, 动态生成 html 网页,下次访问数据时,无需再查询数据,直接将 html 静态页面返回.这样一 ...

  4. 页面静态化技术Freemarker技术的介绍及使用实例.

    一.FreeMarker简介 1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效 ...

  5. Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化

    模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则 ...

  6. JavaWeb页面静态化之使用freemarker模板生成一个html静态页面

    题外话:       页面静态化(展示数据从JSP页面变成HTML页面)实现方式-->模板技术   从本质上来讲,模板技术是一个占位符动态替换技术.一个完整的模板技术需要四个元素:①模板语言(使 ...

  7. SpringBoot2 整合FreeMarker模板,完成页面静态化处理

    本文源码:GitHub·点这里 || GitEE·点这里 一.页面静态化 1.动静态页面 静态页面 即静态网页,指已经装载好内容HTML页面,无需经过请求服务器数据和编译过程,直接加载到客户浏览器上显 ...

  8. freemark 页面静态化

    1. 页面静态化是什么? 页面静态化有非常多含义,在WEB开发中.静态网页一般理解为站点中大部分超级链接所引用的页面是单独的HTML静态页面文件(如.htm..html等页面文件,html语言本身是静 ...

  9. fastDFS shiro权限校验 redis FreeMark页面静态化

    FastDFS是一个轻量级分布式文件系统,   使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传.下载等服务   FastDFS服务端有两个角色:跟踪器(tracker)和存储节点( ...

随机推荐

  1. php双向队列的实现

    队列是一种线性表,按照先进先出的原则进行   单向队列:只能从头进,从尾出   双向队列:头尾都可以进出   class DuiLie {   private $array = array();//声 ...

  2. 【Life】 今天的思考

    今天一个实习生来问我问题,他要用python操作outlook发送邮件,代码是从网上找的. 在其他人的电脑上可以成功运行,但在他的电脑上就失败. 处理过程 (1)我查看了他method里的代码, 发现 ...

  3. 杭电2019多校第一场,Problem I,String 2019

    题目描述 Tom has a string containing only lowercase letters. He wants to choose a subsequence of the str ...

  4. Java EE HttpServletRequest接口和HttpServletResponse接口

    package javax.servlet.http (https://docs.oracle.com/javaee/7/api/javax/servlet/http/package-summary. ...

  5. 带她来看Frozen 2

  6. O053、Attach Volume 操作(Part I)

    参考https://www.cnblogs.com/CloudMan6/p/5624930.html   Volume的最主要用途是做为虚拟磁盘提供给Instance使用.Volume是通过 Atta ...

  7. Laravel 实现指定用户下的设备分页(与查询指定分类下的文章原理相同)

    <?php //控制器 namespace App\Http\Controllers\Api\User; use App\Http\Controllers\Controller; use Ill ...

  8. JavaScript函数尾调用与尾递归

    什么是函数尾调用和尾递归 函数尾调用与尾递归的应用 一.什么是函数的尾调用和尾递归 函数尾调用就是指函数的最后一步是调用另一个函数. //函数尾调用示例一 function foo(x){ retur ...

  9. 跨平台编译ceres for Android

    折腾了几乎一天,记录一下. 最大的坑是官网给出的 1.进入ceres源代码目录下的jni目录 2.EIGEN_PATH="指向eigen库目录,即包含EIGEN文件夹的那个文件夹” ndk- ...

  10. Linux 永久挂载镜像文件和制作yum源

    Linux mount命令是经常会使用到的命令,它用于挂载Linux系统外的文件. 1.镜像挂载到系统指定目录下:[root@master cdrom]#  mount -t auto  /mnt/c ...