Freemarker是一种用于生成动态模板的Java模板引擎。它可以将数据与模板文件结合,生成最终的输出内容。以下是使用Freemarker的实现和配置步骤:
-
引入Freemarker库:首先需要将Freemarker库添加到项目的依赖中。可以通过在Maven或Gradle中添加相应的依赖,或手动将Freemarker的jar文件添加到项目中。
-
配置Freemarker:在项目的配置文件中,需要配置Freemarker的一些属性,如模板文件的位置、编码等。可以通过创建一个Freemarker的配置对象,然后设置相关的属性。
Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);
configuration.setDirectoryForTemplateLoading(new File("path/to/templates"));
configuration.setDefaultEncoding("UTF-8");
这里的"path/to/templates"是模板文件所在的目录路径。
- 获取模板:在使用Freemarker之前,需要加载模板文件,可以通过配置的
TemplateLoader
对象来获取指定的模板。
Template template = configuration.getTemplate("template.ftl");
这里的"template.ftl"是模板文件的名称。
- 构造模板数据:将需要的数据封装成一个Java对象,可以是一个POJO(Plain Old Java Object)或者是一个Map对象。
Map<String, Object> data = new HashMap<>();
data.put("name", "John");
data.put("age", 30);
- 合并模板和数据:使用模板和数据进行合并,生成最终的输出内容。
Writer out = new OutputStreamWriter(System.out);
template.process(data, out);
out.flush();
out.close();
这里的template.process(data, out)
方法会将模板和数据合并,并将结果输出到指定的Writer对象中。
以上是使用Freemarker的基本实现步骤。根据具体需求,还可以在模板中使用Freemarker的标签、指令等功能,对模板进行更加复杂的控制和处理。
在idea中配置freemarker
首先需要导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- apache 对 java io 的封装工具库 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
配置yml文件
server:
port: 8881 #服务端口
spring:
application:
name: freemarker-demo #指定服务名
freemarker:
cache: false #关闭模板缓存,方便测试
settings:
template_update_delay: 0 #检查模板更新延迟时间,设置为0表示立即检查,如果时间大于0会有缓存不方便进行模板测试
suffix: .ftl #指定Freemarker模板文件的后缀名
需要准备导入freemarker-stater然后进行模版配置
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello World!</title>
</head>
<body>
<b>普通文本 String 展示:</b><br><br>
Hello ${name} <br>
<hr>
<b>对象Student中的数据展示:</b><br/>
姓名:${stu.name}<br/>
年龄:${stu.age}
<hr>
</body>
</html>
然后进行controller的配置
@Controller
public class HelloController {
@GetMapping("/basic")
public String test(Model model) {
//1.纯文本形式的参数
model.addAttribute("name", "freemarker");
//2.实体类相关的参数
Student student = new Student();
student.setName("小明");
student.setAge(18);
model.addAttribute("stu", student);
return "01-basic";
}
}