SpringBoot整合视图层技术——freemarker

一、什么是freemarker

freemarker是一种模板引擎。在早前我们使用Struts或者SpringMVC等框架的时候,使用的都是jsp,jsp的本质其实就是一个Servlet,其中的数据需要在服务端进行渲染,然后再在客户端显示,效率比较低下。

思考问题
在学习之前,大家可以试着考虑一下一个比较实际的问题,只有1-2台服务器,客户端有200+,如果所有的渲染数据都放在服务端进行的话,服务端将承受多大的压力?况且现如今计算机性能普遍已经很高了,我们完全可以将这部分压力分摊给客户端,而且实际情况中服务器的数量肯定是远远少于客户端的数量

二、为什么要使用freemarker

现如今,我们开发的项目基本上是以前后端分离为主的,其中的好处不言而喻,所以随之兴起的技术也数不胜数,而模板引擎就是其中一种。
模板引擎中数据渲染是在客户端,在效率方面,相比传统的jsp会高一些。
Spring官方比较推荐的是thymeleaf,其文件后缀是html。
本篇文章我们主要来看看SpringBoot整合freemarker。

三、开始干活

第一步】创建一个SpringBoot项目,创建时可以勾选上如下图所示的依赖:
在这里插入图片描述
注:如果你的项目已经存在,可以在pom.xml文件中添加依赖,如下所示:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

第二步】我们可以创建一个bean和一个controller,bean中主要是定义一个实体,controller主要是进行业务的处理(这里我简写了,直接就用controller了),具体目录结构和代码如下所示:

【目录结构】
在这里插入图片描述
【User.java】

package com.mango.freemarker.bean;

public class User {

    private long id;
    private String username;
    private String address;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

【UserController.java】

package com.mango.freemarker.controller;

import com.mango.freemarker.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.ArrayList;
import java.util.List;

@Controller
public class UserController {

    @GetMapping("/user")
    public String user(Model model) {
        List<User> users = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setId(i);
            user.setUsername("mango>>>" + i);
            user.setAddress("www.mango.com>>>" + i);
            users.add(user);
        }
        model.addAttribute("users",users);
        return "user";
    }
}

第三步】在resource下的templates文件夹下创建freemarker模板(该文件后缀为“.ftlh”),至于为什么在这个文件夹下创建,因为这是官方给的默认的路径,这个路径也可以更改,后面我会讲。如果大家不会创建模板可以百度,也可以评论中问我,因为这个比较简单,所以我就不多做解释了。具体的目录结构和代码如下:

【目录结构】
在这里插入图片描述
【user.ftlh】

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>$Title$</title>
</head>
<body>
<table border="1">
    <tr>
        <th>编号</th>
        <th>用户名称</th>
        <th>用户地址</th>
    </tr>
    <#list users as u>
        <tr>
            <td>${u.id}</td>
            <td>${u.username}</td>
            <td>${u.address}</td>
        </tr>
    </#list>
</table>
</body>
</html>

注:上面这段代码,除了下面这段不完全是html中的,其他都是html模板中的。

<#list users as u>
        <tr>
            <td>${u.id}</td>
            <td>${u.username}</td>
            <td>${u.address}</td>
        </tr>
    </#list>

因为这就是规定的语法格式。下面我们看看运行结果:

运行结果
在这里插入图片描述
到此,freemarker演示结束,下面对freemarker配置相关内容进行拓展一下。

# 自定义 FreeMarker 模板位置, 默认的模板位置在 classpath 下面的 templates 目录中
spring.freemarker.template-loader-path=classpath:/mango1
# 自定义模板的编码格式, 默认就是UTF-8
spring.freemarker.charset=UTF-8
# 定义模板的 content-type
spring.freemarker.content-type=text/html
# 是否开启 FreeMarker 缓存
spring.freemarker.cache=false
# 配置模板后缀
spring.freemarker.suffix=.ftlh

注:上面这段代码是application.properties中关于freemarker的配置,其中我已经给了注释,这些常用的配置大家可以学习一下,若有不足之处,欢迎大家在评论中指出,希望大家能一起进步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章