声明:本系列文章为个人学习笔记,部分内容来自Freemarker官方手册
什么是网页静态
静态页面是网页的代码都在页面中,不需要执行asp,php,jsp,.net等程序生成客户端网页代码的网页,静态页面网址中一般不含“?”、“=”、“&”等特殊符号。
静态页面不能自 主管理发布更新的页面,如果想更新网页内容,要通过FTP软件把文件DOWN下来用网页制作软件修改(通过fso等技术例外).
常见的静态页面举例:.html扩展名的、.htm扩展名的。
为什么要网页静态化
1.方便搜索引擎收录
2.提高程序性能
先于用户获取资源或数据库数据进而通过静态化处理,生成静态页面,所有人都访问这一个静态页面,而静态化处理的页面本身的访问速度要较动态页面快很多倍,因此程序性能会有大大的提升。总之静态化在页面上的体现为:访问速度加快,用户体验性明显提升;在后台体现为:访问脱离数据库,减轻了数据库访问压力(百度百科)。
Freemarker
FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
利用Freemarker静态化网页
步骤:制作模板->制作数据模型->结合
1.模板
2.数据模型模板要根据freemarker 的FTL (FreeMarker模板语言)指令以及表达式来制作
3.编码结合
数据模型可以被看成是树形结构。
标量用于存储单一的值。这种类型的值可以是字符串,数字,日期/时间或者是布尔值。
哈希表是一种存储变量及其相关且有唯一标识名称的容器。
序列是存储有序变量的容器。存储的变量可以通过数字索引来检索,索引通常从0开始。
相关API
- Configuration(freemarker.template.Configuration)
Configuration
实例是存储 FreeMarker 应用级设置的核心部分。同时,它也处理创建和 缓存 预解析模板(比如Template
对象)的工作。注意:它是单例
- Template(freemarker.template.Template)
获取存在的模板,
Template
实例以解析后的形式存储模板, 而不是以源文件的文本形式。Configuration 缓存 Template 实例,当再次获得 test.ftl 的时候,它可能再读取和解析模板文件了, 而只是返回第一次的 Template实例。
代码
Configuration config=new Configuration(Configuration.VERSION_2_3_24); config.setDirectoryForTemplateLoading(new File(this.getServletContext().getRealPath("/")+"/template"));//设置模板路径 config.setDefaultEncoding("UTF-8");//编码 config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); Map<String,Object> root=new HashMap<>();//数据模型 root.put("user",userName); Template temple=config.getTemplate("test.ftl");//获取模板 Writer out = new OutputStreamWriter(new FileOutputStream(this.getServletContext().getRealPath("/")+"index.html"));//生成最终页面并写到文件 try { temple.process(root, out);//处理 } catch (TemplateException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { out.close(); } response.sendRedirect("index.html");//因为在Servlet环境
模板test.ftl
<html> <head> <title>Welcome!</title> </head> <body> <h1>Welcome ${user}!</h1> </body> </html>