页面静态化技术Freemarker技术的介绍及使用实例.
admin
2023-06-06 10:21:29
0次

一、FreeMarker简介

  1、动态网页和静态网页差异

   在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术。静态网页,随着HTML代码的生成,页面的内容和显示效 果就不会再发生变化(除非你修改页面代码)。而动态网页则不然,页面代码虽然没有发生变化,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而 发生相应的变化。简而言之,动态网页是基本的HTML语法规范与java、VB、VC等高级程序设计语言、数据库编程等多种技术的融合,以实现对网站内容 和风格的高效、动态和交互式的管理。

  通过前面的介绍我们可以得出动态网页和静态网页的优缺点下载(这里我们只考虑网站性能方面的相关问题,信息安全等多方面问题不做赘述):

  1)静态网页:

  a、静态网页的内容稳定,页面加载速度快。

  b、静态网页的没有数据库支持,在网站制作和维护方面的工作量较大。

  c、静态网页的交互性差,有很大的局限性。

  2)动态网页:

  a、交互性好。

  b、动态网页的信息都需要从数据库中读取,每打开一个一面就需要去获取一次数据库,如果访问人数很多,也就会对服务器增加很大的荷载,从而影响这个网站的运行速度。

   通过上面的比较我们不难看出,要提升网站的性能,我们只要把动态网页做成静态网页就会在运行速度方面有显著的提升,但是问题出来了,如果将所有页面都做 成静态页面显然是不切实际的。有什么办法能让我们的网站即能有动态网页的交互性,又有静态网页的加载速度呢?FreeMarker便能实现这样的需求:实 现动态网页静态化。

  2、FreeMarker原理下载

  FreeMarker是一个基 于Java的开发包和类库的一种将模板和数据进行整合并输出文本的通用工具,FreeMarker实现页面静态化的原理是:将页面中所需要的样式写入到 FreeMarker模板文件中,然后将页面所需要的数据进行动态绑定并放入到Map中,然后通过FreeMarker的模板解析类process()方 法完成静态页面的生成。其工作原理如图2-1所示。

模板 +  数据模型 = 输出

二, 示例演示FreeMarker下载

先看一下Demo项目的整体结构:

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

上面我们已经说了, 模板 +  数据模型 = 输出, 那么我们就一个个看模板和数据模型是什么样子的, 以及最后的输出是什么样子的.
注: 这里将省略freemarker的语法, 因为很多都是类似EL表达式的, 这里只提供几种情况的讲解,下载 其中包括: list, map, list和map混合
FMDemo.java:

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

 1 public class FMDemo { 2  3     //Freemarker 4     public static void main(String[] args) throws Exception { 5          6         Configuration conf = new Configuration(); 7         //模板+数据模型 = 输出 8         //ftl: freemarker template 9         //第一步: 读取html模板10         String dir = "C:\\workspace\\freemarker\\ftl\\";11         conf.setDirectoryForTemplateLoading(new File(dir));12         Template template = conf.getTemplate("freemarker.html");13         14         //第二步: 加载数据模型15         Map root = new HashMap();16         root.put("world", "世界你好");17         18         //List集合19         List persons = new ArrayList();20         persons.add("范冰冰");21         persons.add("李冰冰");22         persons.add("何炅");23         root.put("persons", persons);24         25         //Map集合26         Map map = new HashMap();27         map.put("fbb", "范冰冰");28         map.put("lbb", "李冰冰");29         root.put("map", map);30         31         //list和map混合32         List maps = new ArrayList();33         Map pms1 = new HashMap();34         pms1.put("id1", "范冰冰");35         pms1.put("id2", "李冰冰");36         Map pms2 = new HashMap();37         pms2.put("id1", "曾志伟");38         pms2.put("id2", "何炅");39         maps.add(pms1);40         maps.add(pms2);41         root.put("maps", maps);42         43         Writer out = new FileWriter(new File(dir + "hello.html"));44         template.process(root, out);45         System.out.println("生成完成");46     }47 }

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

freemarker.html: 模板文件下载

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

 1  2  3  4  5 Insert title here 6  7  8 ${world} 9 
10 11 <#list persons as person>12     <#if person_index == 2>13         ${person}---红色14     <#else>15         ${person}---绿色16     17 
18 19 <#list map?keys as key>20     ${map[key]}21 22 ${map.fbb}/${map.lbb}
23 24 <#list maps as map>25     <#list map?keys as key>26         ${map[key]}27     28 29 <#list maps as map>30     ${map.id1}///${map.id2}31 32 33 

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

执行FMDemo.java中的Main方法, 这会生成:
页面静态化技术Freemarker技术的介绍及使用实例.
hello.html:

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



三, 静态化页面在项目中的使用下载

这里就来说下静态化页面在项目中的使用情况, 现在只是给商品详情页做了静态化处理.
前面关于ActiveMQ的文章已经说过, 当一个商品上架的时候, 通过发送消息来通知babasport-cms 来将对应的页面静态化. 
在这里我们只写接收消息的方法, 首先来看看babasport-cms的结构图:
CustomMessageListener.java:接收MQ中的消息

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


StaticPageServiceImpl.java:

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


使用Spring管理Freemarker配置文件:

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

 1      2          3              4                  5                      6                      7                      8                      9                 10             11         

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


模板页面: product.html 中的改动:

引入其他页面:下载


<#include "commons/header.html" />

循环遍历colors:

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

 1  2     <#list colors as color> 3      4          5          6         ${color.name } 9     
10     11 

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

循环遍历imgUrls, 并且使用if..else 进行判断:

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

 1  2      3         <#list product.imgUrls as pic> 4                 <#if pic_index == 0> 5                     
  •  7                 <#else> 8                     
  • 10                 11         12     13 

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

    其他的照常使用EL表达式, 然后生成 id.html的静态化页面, 查看访问后的页面


    相关内容

    热门资讯

    空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
    空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
    格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
    空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
    格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
    品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
    空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
    空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
    中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
    中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...