文章目录
一.背景
用户访问动态页面时都需要通过ajax发送请求查询数据库获取动态数据进行展示,但是这页面的访问量如果比较大且数据库中的数据变化频
率并不高,这就会对数据库造成了很大的访问压力。如何对数据库减压并提高系统运行性能呢?答案就是页面静态化。
页面静态化其实就是将原来的动态网页(例如通过ajax请求动态获取数据库中的数据并展示的网页)改为通过静态化技术生成的静态网页,这样用户在访问网页时,服务器直接给用户响应静态html页面,没有了动态查询数据库的过程。
二.页面静态化技术freemarker
FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与 Web 容
器无关,即在 Web 运行时,它并不知道 Servlet 或 HTTP。它不仅可以用作表现层的实现技术,而且还
可以用于生成 XML,JSP 或 Java 等。
三.Freemarker基本操作
1.引入依赖:
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
2.创建模板文件:
模板文件中有四种元素:
- html原生文本
- 注释,即<#-- -->
- 插值::即${…}部分,将使用数据模型中的部分替代输出
- FTL指令::FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出
freemarker模板文件后缀一般为 .ftl
编写模板文件:
<html>
<head>
<meta charset="utf-8">
<title>Freemarker入门</title>
</head>
<body>
<#--我只是一个注释,我不会有任何输出 -->
${name}你好,${message}
</body>
</html>
通过java结合模板文件生成html文件
public static void main(String[] args) throws Exception{
//1.创建配置类
Configuration configuration=new Configuration(Configuration.getVersion());
//2.设置模板所在的 目录
configuration.setDirectoryForTemplateLoading(new File("D:\\ftl"));
//3.设置字符集
configuration.setDefaultEncoding("utf-8");
//4.加载模板 (模板目录下以ftl后缀的模板文件)
Template template = configuration.getTemplate("test.ftl");
//5.创建数据模型
Map map=new HashMap();
map.put("name", "张三");
map.put("message", "欢迎!");
//6.创建Writer对象 ,创建html生成的目录
Writer out =new FileWriter(new File("d:\\test.html"));
//7.输出
template.process(map, out);
//8.关闭Writer对象
out.close();
}
生成的html文件如下:(对应的$ {name}、$ {message}被成功替换)
<html>
<head>
<meta charset="utf-8">
<title>Freemarker入门</title>
</head>
<body>
张三你好,欢迎
</body>
</html>
3.FTL指令:
- assign指令:用于在页面上定义一个变量
- 定义一个简单类型
<#assign linkman=“周先生”>
联系人:${linkman}
- 定义一个json对象
<#assign info={“mobile”:“123456”,‘address’:‘地球’} >
电话:$ {info.mobile} 地址:$ {info.address}
- include指令:用于模板文件的嵌套。一个模板引入另一个模板
<!--head.ftl--> <h1> hello</h1>
<!--test.ftl--> <#include "head.ftl"/> <br> world
最终生成的html文件
<h1>hello</h1> <br> world
- if 指令:在模板文件中使用指令进行判断
<#if success=true> 你已通过实名认证 <#else> 你未通过实名认证 </#if>
在java中:
map.put("success", true);
- list指令:list指令用于遍历
模板文件
<#list> 商品名称: ${goods.name} 价格:${goods.price} <br> </#list>
java代码
List goodsList=new ArrayList(); Map goods1=new HashMap(); goods1.put("name", "苹果"); goods1.put("price", 5.8); Map goods2=new HashMap(); goods2.put("name", "香蕉"); goods2.put("price", 2.5); Map goods3=new HashMap(); goods3.put("name", "橘子"); goods3.put("price", 3.2); goodsList.add(goods1); goodsList.add(goods2); goodsList.add(goods3); map.put("goodsList", goodsList);
以上就是freemarker的基本用法,但是在实际开发中freemarker要远远复杂的多。
四.freemarker整合spring
依赖引入和上面一样:
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
spring配置文件:
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<!--指定模板文件所在目录-->
<property name="templateLoaderPath" value="/WEB-INF/ftl/" />
<!--指定字符集-->
<property name="defaultEncoding" value="UTF-8" />
</bean>
<context:property-placeholder location="classpath:freemarker.properties"/>
//生成的html文件所存放的位置
out_put_path=D:/ideaProjects/zj/health_mobile/src/main/webapp/pages
通用生成html文件样式:
/**
* templateName模板文件的名称
* htmlPageName生成html文件的名称
* map 给${} 赋值的映射关系
*/
public void generteHtml(String templateName,String htmlPageName,Map map){
Configuration configuration = freeMarkerConfigurer.getConfiguration();//获得配置对象
Writer out = null;
try {
Template template = configuration.getTemplate(templateName);
//构造输出流
out = new FileWriter(new File(outPutPath + "/" + htmlPageName));
//输出文件
template.process(map,out);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
五.总结:
1.什么是网页静态化技术
随着用户访问量以及数据量的增大,网页静态化技术方案如今越来越流行。
什么是网页静态化技术呢?简单来说就是将网页以纯静态方式的形式展现。
2.网页静态化技术与缓存技术的比较
共同点:都可以减小数据库的访问压力。
区别:
(1)缓存技术(例如redis)适用于小规模的数据。以及一些经常变动的数据。
(2)网页静态化技术适用于大规模但是变化不太频繁的数据。
3.网页静态化技术的应用场景
(1)新闻门户网站的文章类型频道一般都用到了网页静态化技术。点击新闻直接会跳到静态化的页面。
(2)电商网站的商品详情页也十分常用,我们在存储商品的时候会生成静态化页面,点击商品详情,会直接跳到生成的商品详情的静态化页面。
(3)网页静态化技术可以结合Nginx这种高性能web服务器来提高并发访问量。
4.什么是FreeMarker
FreeMarker是一款用Java语言编写的模板引擎,用它可以通过模板和要改变的数据来生成输出文本(例如HTML网页,配置文件,源代码等),作为用来实现网页静态化技术的一种手段。FreeMarker的使用率大大超过其他一些技术。对于系统中频繁使用数据库进行查询但是内容更新很小的应用,都可以用FreeMarker将网页静态化,这样就避免了大量的数据库访问请求,从而提高网站的性能。
其他链接:
freemarker官网