微服务项目学习之FreeMarker
FreeMarker是什么
FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。
这种方式通常被称为 MVC (模型 视图 控制器) 模式,对于动态网页来说,是一种特别流行的模式。 它帮助从开发人员(Java 程序员)中分离出网页设计师(HTML设计师)。设计师无需面对模板中的复杂逻辑, 在没有程序员来修改或重新编译代码时,也可以修改页面的样式。
而FreeMarker最初的设计,是被用来在MVC模式的Web开发框架中生成HTML页面的,它没有被绑定到 Servlet或HTML或任意Web相关的东西上。它也可以用于非Web应用环境中。
FreeMarker 是免费的,基于Apache许可证2.0版本发布。
FreeMarker用来进行页面静态化
什么是页面静态化
我们都知道:
静态页面内容稳定,加载速度快。
但是静态网页如果没有数据库的支持,那么在网站制作和维护方面的工作量都会很大。静态网页的交互性大,有很大的局限性。
动态网页呢,交互性好。读取数据都要从数据库读取,每打开一个页面都需要去访问数据库,如果访问量过多的话,会对服务器造成压力,从而会影响网站的运行速度。
通过以上对比,想要提升网站的性能,让我们的网页既能有动态网页的交互性,又能有静态网站的加载速度。我们可以采用把动态页面静态化。把页面静态化的目的,就是降低http请求的个数,从而降低对数据库的操作,从而提高网站的运行速度。这样用户在访问的时候就是一个提前生成好的一个静态页面。
FreeMarker可以帮我们实现这样的需求。
页面静态化流程
1、获取模型数据
2、制作模板
3、对页面进行静态化
4、将静态化生成的html页面存放文件系统中
5、将存放在文件系统的html文件发布到服务器
快速入门
1.创建工程
创建Spring Boot工程时勾选FreeMarker并加入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐web</artifactId>
</dependency>
2.配置文件
server:
port: 8088 #服务端口
spring:
application:
name: test‐freemarker #指定服务名
freemarker:
cache: false #关闭模板缓存,方便测试
settings: template_update_delay: 0 #检查模板更新延迟时间,设置为0表示立即检查,如果时间大于0会有缓存不方便 进行模板测试
3.创建模型类
package com.xuexi.test.freemarker.model;
import lombok.Data;
import lombok.ToString;
import java.util.Date;
import java.util.List;
@Data
@ToString
public class Student {
private String name;//姓名
private int age;//年龄
}
4.创建模板
在 src/main/resources下创建templates,此目录为freemarker的默认模板存放目录。 在templates下创建模板文件test1.ftl,模板中的${name}最终会被freemarker替换成具体的数据。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf‐8">
<title>Hello World!</title>
</head>
<body> Hello ${name}!
</body>
</html>
5.创建controller
创建Controller类,向Map中添加name,最后返回模板文件。
package com.xuexi.test.freemarker.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
@RequestMapping("/freemarker")
@Controller
public class FreemarkerController {
@Autowired
RestTemplate restTemplate;
@RequestMapping("/test1")
public String freemarker(Map<String, Object> map){
map.put("name","人人人");
//返回模板文件名称
return "test1";
}
}
6.创建启动类
@SpringBootApplication
public class FreemarkerTestApplication {
public static void main(String[] args) {
SpringApplication.run(FreemarkerTestApplication.class,args);
}
}
其它的内容参考FreeMarker中文参考手册