FreeMarker--04---页面静态化
Posted 高高for 循环
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FreeMarker--04---页面静态化相关的知识,希望对你有一定的参考价值。
文章目录
页面静态化
通过上述介绍可知 Freemarker 是一种基于模板的、用来生成输出文本的通用工具所以 我们必须要定制符合自己业务的模板,然后生成自己的 html 页面。
- Freemarker 是通过 freemarker.template.Configuration 这个对象对模板进行加载的(它也处理创建和缓存预 解析模板的工作),然后我们通过 getTemplate 方法获得你想要的模板,有一点要记住 freemarker.template.Configuration 在你整个应用必须保证唯一实例。
案例:
定义模板-----news.ftl
<!doctype html>
<html>
<head>
<#-- freemaeker模板中设置编码格式,否则中文可能乱码 -->
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
</head>
<body>
<#-- 新闻标题 -->
<h2 align="center">${title}</h2>
<#-- 新闻来源 和 发布时间 -->
<p align="center">
新闻来源:${source}
发布时间:${pubTime}
</p>
<#-- 新闻内容 -->
<p style="text-indent: 2em">
${content}
</p>
</body>
</html>
加载模板
- 实例化模板对象 Configuration configuration = new Configuration();
- 设置加载模板的上下文 以及加载模板的路径 (模板存放路径)
- 设置模板的编码格式
- 加载模板文件 获取模板对象
- 设置数据模型
- 设置输出流
- 生成html (将数据模型填充到模板中)
package com.xxxx.servlet;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@WebServlet("/news")
public class NewsServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1.实例化模板对象
Configuration configuration = new Configuration();
// 2.设置加载模板的上下文 以及加载模板的路径 (模板存放路径)
configuration.setServletContextForTemplateLoading(getServletContext(),"/template");
// 3.设置模板的编码格式
configuration.setDefaultEncoding("UTF-8");
// 4.加载模板文件 获取模板对象
Template template = configuration.getTemplate("news.ftl");
// 5.设置数据模型
Map<String,Object> map = new HashMap<>();
map.put("title","【战“疫”说理】良好的公民素养和国民心态是“硬核”力量");
map.put("source","经济日报-中国经济网");
map.put("pubTime","2021年09月19日 20:00");
map.put("content","公共性的社会大事件,是检验和透视公民素养和国民心态的一个重要窗口。" +
"在突袭而至的新冠肺炎疫情面前,一方面,抗击疫情的过程就是淬炼公民素养和国民心态的熔炉;另一方面,良好的公民素养和国民心态也是疫情防控的“硬核”力量,更是推动战“疫”积极向好态势不断拓展的精神之盾。\\n" +
"\\n疫情防控,既是大战,也是大考。涵养良好的公民素养和国民心态,是疫情期间摆在我们面前的考题,同时也是提升国家治理能力过程中需要面对的课题。\\n" +
"\\n着眼三个方面 提升科学素养\\n\\n疫情面前,每个人都是防控链条中的重要一环。做好自我保护,既是对自己、家人负责,也是对社会负责。有效做好科学防控,每个人都应具备必要的科学素养。");
//6.设置输出流
// 获取项目的根目录
String basePath = req.getServletContext().getRealPath("/");
// 设置html的存放路径
File htmlFile = new File(basePath + "/html");
// 判断文件(目录)是否存在
if (!htmlFile.exists()) {
// 如果文件目录不存在,则新建文件目录
htmlFile.mkdir();
}
// 得到生成的文件名 (生成随机不重复的文件名)
String fileName = System.currentTimeMillis() + ".html";
// 创建html文件
File file = new File(htmlFile,fileName);
// 获取文件输出流
FileWriter writer = new FileWriter(file);
// 7.生成html (将数据模型填充到模板中)
try {
template.process(map,writer);
} catch (TemplateException e) {
e.printStackTrace();
} finally {
// 关闭资源
writer.flush();
writer.close();
}
}
}
生成对应的html文件
- 启动项目浏览器地址栏输入:
http://localhost:9090/news
http://localhost:9090/html/1632055217889.html
以上是关于FreeMarker--04---页面静态化的主要内容,如果未能解决你的问题,请参考以下文章