Freemarker简介
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件
------引用百度百科
根据我自己的理解,freemarker其实和jsp等模板引擎一样,服务端提供数据模型,前端提供一个模板
freemarker将数据根据约定的方法填入具体的模板内,最终呈现出一个具体的页面,这就是freemarker的原理
一、举个简单的例子
实体类User.java
package com.rambler.domain;
public class User {
private String username;
private String password;
private int age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public User(){
}
public User(String username,String password,int age){
this.password = password;
this.username = username;
this.age = age;
}
}
数据来源,此处用的springmvc,其他的也一样,提供数据源
package com.rambler.controller;
import com.rambler.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.List;
@Controller
public class MainController {
@RequestMapping("/user/list")
public String list(Model model){
List<User> list = new ArrayList<User>();
User user = new User("rambler","123456",15);
User user2 = new User("rambler","123456",15);
list.add(user);
list.add(user2);
model.addAttribute("user",list);
return "user";
}
}
模板user.ftl
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<meta content="text/html;charset=utf-8"></meta>
<title>Hello World!</title>
</head>
<body>
<div class="container">
<table class="table">
<caption>用户列表</caption>
<thead>
<tr>
<th>姓名</th>
<th>密码</th>
<th>年龄</th>
</tr>
</thead>
<tbody>
<#list user as user>
<tr>
<td>${user.username}</td>
<td>${user.password}</td>
<td>${user.age}</td>
</tr>
</#list>
</tbody>
</table>
</div>
</body>
</html>
效果
二、分析
在这个例子中,服务器端封装了一个User的集合,通过Model发送到ftl模板中
model.addAttribute("user",list);
可见,发送的数据名称为user,因此freemarker通过user访问这个数据模型
类似如下freemarker的循环结构
<#list user as user>
<tr>
<td>${user.username}</td>
</tr>
</#list>通过<#list>标识这是一个标签其中第一个参数user是获取服务器发送来的user,第二个是user集合中的一个元素,也就是一个User对象
通过这种方式进行遍历,和java的遍历增强一样
for(User user:user){
user.getUsername();
}
通过这种方式访问user中的每一个user
每一个user在通过${user.username}访问封装的User类的username属性(通过的是该类的get方法,因此必须有get方法)
这就是第一个入门例子,大家有疑问可以在评论区评论,同时欢迎大家关注我后续发布的有关freemarker的博客