注:所有参考文档均附在文末

一、使用情景

公司的cms产品,最近正在做功能迁移,而我正好负责将老后台的文章发布功能迁移到新后台。
文章发布使用到的核心技术是页面静态化。发布的时候,会生成对应的静态页面,并将静态文件保存到指定路径下;同时,刷新cdn,实现修改同步。

二、页面静态化说明

技术原理
静态化一般使用在这种场景:将经常访问但不常修改的页面,转换成静态页面。静态页面是网页(html、htm)的代码都在页面中,不需要执行asp,php,jsp,.net等动态语言而生成客户端网页代码的网页,不经过数据库查询。常见的静态页面举例:.html、.htm。

优点
① 提高速度
比如jsp这一类的动态网页,需要进行数据库查询,这时访问量增加,数据库查询的次数也会随之增加,会占用很大的资源,影响到网站的反应速度。如果把首页、内容静态化的话,就会去除了查询数据库的次数,减少一部分环节,加快网站反应速度。
② 搜索引擎的收录
从网站的优化上来说,搜索引擎更喜欢静态网页,也容易进行抓取,SEO排名也会更高。比如百度、阿里巴巴、搜狐都使用静态网页或者伪静态网页来显示,方便搜索引擎的抓取与排名。
③ 安全性
静态网页不容易被黑客所攻破。静态网页没有查询数据库,不会让黑客看到数据库里的内容。
④ 网站稳定性
如果后台程序、数据库等出现错误,影响网站的访问,影响用户的体验度,降低了用户的信任度,而静态网页就不会出现这种情况。
缺点
① 交互性差,功能上有限制。
② 增加网站的开发复杂度,不利于程序维护和管理。
③ 占用硬盘空间大。
④ 不灵活,静态化操作需要开关的,需要我们专门的设计。

静态化常用技术
FreeMarker
Thymeleaf
Velocity
jsp

FreeMarker有着良好的性能和扩展性等综合优势,且网上可供学习的资源丰富,是我本次文章发布的首选模板引擎,后文主要记录使用FreeMarker实现页面静态化Demo项目的过程。

三、FreeMarker实现页面静态化

FreeMarker官方手册
FreeMarker官方手册(中文版)

1、原理

模板+数据→静态HTML

2、目标

通过FreeMarker模板引擎渲染,在指定目录下,生成文章详情页的静态html文件;打开文件,模板和传入的数据均正常显示。
效果如下:红框内为模板内容,蓝框内为模板数据

3、步骤

说明:JDK8、不涉及数据库(直接传值)、SpringBoot
实体类:article

public class Article {private String title;private String author;private String content;private String date;}

3.1、引入模板引擎

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency>

3.2、创建模板
创建ftl格式的模板文件,放在templates目录下(渲染时,会自动找到该目录下的模板),freemarker的语法详见官方文档或百度(该语法支持分页、循环等)

<html>
<head><title>PageStatic</title>
</head>
<body>
标题:${article.title}<br/>
作者:${article.author}<br/>
日期:${article.date}<br/>
正文:${article.content}<br/>
</body>
</html>

3.3、核心方法
service

public interface PageService {public void ftlToHtml() throws IOException, Exception;
}

serviceImpl

public class PageServiceImpl implements PageService {private static final String PATH = "/templates/" ;@Overridepublic void ftlToHtml() throws Exception {// 创建配置类Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);// 设置模板路径String classpath = this.getClass().getResource("/").getPath();File file = new File(classpath + PATH);configuration.setDirectoryForTemplateLoading(file);// 加载模板Template template = configuration.getTemplate("freemarkerTP.ftl");// 数据模型Article article = new Article();article.setTitle("这是文章标题");article.setAuthor("liuhui");article.setDate(DateFormat.getDateInstance().format(new Date()));article.setContent("这是正文内容");Map<String, Object> map = new HashMap<>();map.put("article", article);// 静态化页面内容String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);System.out.println("content:{}" + content);InputStream inputStream = new ByteArrayInputStream(content.getBytes("UTF-8"));// 输出文件(指定文件输出目录)FileOutputStream fileOutputStream = new FileOutputStream(new File("D:/huaqiyun/newPage.html"));IOUtils.copy(inputStream, fileOutputStream);// 关闭流inputStream.close();fileOutputStream.close();}
}

controller

@Controller
public class FreemarkerController {@Autowiredprivate PageServiceImpl pageService;@RequestMapping("/freemarker")public void ftlToHtml() throws Exception {pageService.ftlToHtml();}
}

注意:不要使用单元测试来调用方法,页面是通过模板引擎来渲染的,所以必须启动项目,模板引擎才能工作。

3.4、最终效果

  • 指定目录下生成该文件
  • 浏览器打开,动态渲染的html数据无误

参考资料
jsp、freemarker、velocity、thymeleaf页面方案分析
thymeleaf和freemarker谁更好用?
页面静态化模板引擎-Freemaker
SpringBoot2 整合FreeMarker模板,完成页面静态化处理

FreeMarker模板引擎实现页面静态化相关推荐

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

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

  2. SpringBoot整合Thymleaf实现页面静态化

    文章整理题材来源于传智播客乐优商城项目实战! 1. 问题需求分析 在做乐优商城时,页面是通过Thymeleaf模板引擎渲染后返回到客户端.当商品详情页数据渲染时,在后台需要大量的数据查询,而后渲染得到 ...

  3. 网站页面静态化(二)thymeleaf生成

    今年是农历大年初三,在这里首先给各位朋友拜个年,祝大家新年快乐,虎年大吉大利,事业蒸蒸日上.过年无事,把页面静态化技术整理整理.本文将以thymeleaf为例子,说明在springboot当中,如何基 ...

  4. 学成在线--9.页面静态化

    文章目录 一.页面静态化流程 二.数据模型 1.轮播图DataUrl接口 1)需求分析 2)接口定义 3)Dao 4)Service 5)Controller 6)测试 2.远程请求接口 1)添加依赖 ...

  5. JavaWeb(14) 页面静态化之使用freemarker模板生成一个html静态页面

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

  6. 【工具类】页面静态化 --- Freemarker的使用

    介绍 FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与 Web 容器无关,即在 Web 运行时,它并不知道 Servlet 或 HTTP. ...

  7. freemarker之页面静态化

    静态化? 这里我们以网页静态化技术之一的Freemarker 为例子.以电商为原型 对于电商网站的商品详情页来说,至少几百万个商品,每个商品又有大量的信息,这样的情况同样也适用于使用网页静态化来解决 ...

  8. freemarker 页面静态化技术

    文章目录 一.背景 二.页面静态化技术freemarker 三.Freemarker基本操作 1.引入依赖: 2.创建模板文件: 3.FTL指令: 四.freemarker整合spring 五.总结: ...

  9. 使用Freemarker来页面静态化,与Spring整合使用

    页面静态化介绍 页面静态化其实就是将原来的动态网页(例如通过ajax请求动态获取数据库中的数据并展示的网页)改为 通过静态化技术生成的静态网页,这样用户在访问网页时,服务器直接给用户响应静态html页 ...

  10. 性能优化:用FreeMarker实现页面静态化

    [IT168 技术]众所周知,随着网站的访问量增加,如何给用户以良好的访问体验就显得尤为重要.提升网站性能便成为一些网站面临的一大难题,像hao123这样的导航网站要提升网站的性能只要部署的web服务 ...

最新文章

  1. ElasticSearch性能优化策略【转】
  2. jenkins 命令找不到
  3. NMS(Non-Maximum Suppression)非极大值抑制
  4. c++ websocket 客户端
  5. 硬核黑科技告诉你,漫威十年到底有多少个角色?
  6. glibc之pthread_mutex_t/pthread_cond_t实现原理(十七)
  7. 智能配电台区监控系统方案
  8. 最新抖音视频无水印解析接口及原理
  9. 番外篇:常见安全漏洞及解决方案
  10. 数据库操作:更新数据update
  11. vue项目中使用高德地图实现添加点标记和获取点击位置信息
  12. 如何用Java分配一段连续的1G的内存空间?需要注意些什么?
  13. In Search of the Holy Grail 寻找圣杯 中文翻译
  14. Google Earth Engine(GEE)提取不透水面的方法
  15. C#应用程序退出后托盘图标(notify…
  16. openpnp - configure - Connect the driver to your controller
  17. java求二维数组每行元素的和
  18. Android Studio 3.6 稳定版发布,你用上了吗?
  19. HP服务器OA访问故障的低级错误
  20. 工位出租,资源配置平台

热门文章

  1. linux版征途架设教程,魔兽世界-燃烧的征途端完整架设教程有图有真相
  2. 去掉图标_小图标创建|精选博客
  3. C语言运算符的优先级与结合性
  4. idea创建yml配置文件不是绿色
  5. Sqlserver-循环执行sql语句
  6. UML图绘制(三)-----用例图的画法
  7. 小爱同学指令大全_小爱同学有趣的命令分享给大家
  8. TMQ:定时消息队列原理与实现
  9. MAX485芯片介绍(MAX485ESA+T,半双工RS422和RS485串口收发传输芯片,2.5Mbps传输速率。5V逻辑电平)
  10. 【vue源码工程阅读1:下载源码】认识工程并打包