目录
一、简介
FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据。
二、springboot如何整合freemarker
1、引入pom
<!--freemarker模板-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
2、配置freemarker基本属性
spring:
#模板引擎 freemarker
freemarker:
# 是否启用模板缓
cache: false
# 模板编码
charset: UTF-8
#设置ftl文件根路径
template-loader-path: classpath:/templates
#是否检查模板位置是否存在
check-template-location: true
#Content-Type value
content-type: text/html
#设定所有request的属性在merge到模板的时候,是否要都添加到model中
expose-request-attributes: true
#是否在merge模板的时候,将HttpSession属性都添加到model中
expose-session-attributes: true
#request-context为request
request-context-attribute: request
#文件后缀
suffix: .ftl
3、准备前端ftl模板文件,工程目录如下:
4、index.ftl
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>freemarkerIndex</title>
</head>
<body>
这个是freemarker模板文件Index.ftl
</body>
</html>
5、center.ftl
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>center</title>
</head>
<body>
这个是freemarker模板文件center.ftl<br>
<b>${resource.name}</b><br>
<b>${resource.address}</b><br>
<b>${resource.phone}</b><br>
</body>
</html>
6、编写controller
package com.example.springbootdemo.controller.freemarker;
import com.example.springbootdemo.configuration.CompanyConfig;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
@Controller
@RequestMapping("ftl")
public class FreemarkerController {
@Resource
private CompanyConfig companyConfig;
@RequestMapping("/index")
public String index(){
return "freemarker/index";
}
@RequestMapping("/center")
public String center(ModelMap map){
map.put("resource", companyConfig);
return "freemarker/center/center";
}
}
注意:是 @Controller不是@RestController,否则返回的是文本body。CompanyConfig 类为资源配置类,可参考Springboot资源文件属性配置(五)_wzcwmhp的博客-CSDN博客
7、访问http://localhost:8080/ftl/index,结果如下:
8、访问http://localhost:8080/ftl/center ,结果如下:
可以看到,通过ModelMap对象,可以向模板中传递对象并引用,类似于request的setAttribute方法的作用。
三、freemarker更多基本属性配置
#设置是否允许HttpServletRequest属性重写(隐藏)控制器生成同名的模型属性。
spring.freemarker.allow-request-override=false
#设置是否允许HttpSession属性重写(隐藏)控制器生成同名的模型属性。
spring.freemarker.allow-session-override=false
#启用模板缓存
spring.freemarker.cache=false
# 模板编码
spring.freemarker.charset=UTF-8
# 检查模板位置是否存在
spring.freemarker.check-template-location=true
# 内容类型值
spring.freemarker.content-type=text/html
# 启用mvc视图解决方案
spring.freemarker.enabled=true
# 是否将所有请求属性添加到与模板合并之前的模型中
spring.freemarker.expose-request-attributes=false
# 设置是否所有HttpSession属性应该与模板融合之前添加到模型
spring.freemarker.expose-session-attributes=false
# 设置是否公开一个由Spring的macro库使用RequestContext,在名为“springMacroRequestContext”。
spring.freemarker.expose-spring-macro-helpers=true
# 是否开启模板文件的热部署
spring.freemarker.prefer-file-system-access=true
# 视图前缀
spring.freemarker.prefix=
# Name of the RequestContext attribute for all views.
spring.freemarker.request-context-attribute=
# Well-known FreeMarker keys which will be passed to FreeMarker's Configuration.
spring.freemarker.settings.*=
# 视图的后缀
spring.freemarker.suffix=
# 模板路径配置,多个模板路径用分号分割
spring.freemarker.template-loader-path=classpath:/templates/
# 视图解析的白名单
spring.freemarker.view-names=