freemarker 页面静态化技术

文章目录

    • 一.背景
    • 二.页面静态化技术freemarker
    • 三.Freemarker基本操作
      • 1.引入依赖:
      • 2.创建模板文件:
      • 3.FTL指令:
    • 四.freemarker整合spring
    • 五.总结:
      • 1.什么是网页静态化技术
      • 2.网页静态化技术与缓存技术的比较
      • 3.网页静态化技术的应用场景
      • 4.什么是FreeMarker

一.背景

用户访问动态页面时都需要通过ajax发送请求查询数据库获取动态数据进行展示,但是这页面的访问量如果比较大且数据库中的数据变化频
率并不高,这就会对数据库造成了很大的访问压力。如何对数据库减压并提高系统运行性能呢?答案就是页面静态化。

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

二.页面静态化技术freemarker

FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与 Web 容
器无关,即在 Web 运行时,它并不知道 Servlet 或 HTTP。它不仅可以用作表现层的实现技术,而且还
可以用于生成 XML,JSP 或 Java 等。

freemarker 页面静态化技术_第1张图片

三.Freemarker基本操作

1.引入依赖:

<dependency> 	
	<groupId>org.freemarkergroupId> 
	<artifactId>freemarkerartifactId> 
	<version>2.3.23version> 
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指令:用于在页面上定义一个变量
  1. 定义一个简单类型

<#assign linkman=“周先生”>
联系人:${linkman}

  1. 定义一个json对象

<#assign info={“mobile”:“123456”,‘address’:‘地球’} >
电话:$ {info.mobile} 地址:$ {info.address}

  • include指令:用于模板文件的嵌套。一个模板引入另一个模板

<h1> helloh1>

<#include "head.ftl"/>
<br>
world

最终生成的html文件

<h1>helloh1>
<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.freemarkergroupId> 
	<artifactId>freemarkerartifactId> 
	<version>2.3.23version> 
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官网

你可能感兴趣的:(java项目工具,java,服务器,前端)