springboot 整合FreeMarker

129 篇文章 0 订阅
本文介绍了FreeMarker模板引擎的基本概念,以及如何在SpringBoot项目中整合FreeMarker,包括添加依赖、配置自动处理、控制器操作和创建视图。详细讲解了配置文件的设置和示例代码实现。
摘要由CSDN通过智能技术生成

FreeMarker是一个非常古老的模板引擎,可以用在Web环境或者非Web环境中。

与Thymeleaf不同,FreeMarker需要经过解析才能够在浏览器中展示出来。FreeMarker不仅可以用来配置HTML页面模板,也可以作为电子邮件模板、配置文件模板以及源码模板等。

Spring Boot中对FreeMarker整合也提供了很好的支持,主要整合步骤如下:

1. 创建项目,添加依赖首先创建Spring Boot项目,然后添加spring-boot-starter-web和spring-boot-starter-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>

配置FreeMarker

Spring Boot对FreeMarker也提供了自动化配置类FreeMarkerAutoConfiguration,相关的配置属性在FreeMarkerProperties中,从该默认配置中可以看到,FreeMarker默认模板位置和Thymeleaf一样,都在classpath:/templates/中,默认文件后缀是.ftl。

开发者可以在application.properties中对这些默认配置进行修改,部分常见配置如下:

#HttpservletRequest的属性是否可以覆盖contorller中的model的同名项
spring.freemarker.allow-request-override=false

#HttpSession的属性是否可以覆盖controller中的model的同名项
spring.freemarker.allow-session-override=false

#是否开启缓存
spring.freemarker.cache=false

#文件编码
spring.freemarker.charset=UTF-8

#是否检查模板位置
spring.freemarker.check-template-location=true

#ContentType的值
spring.freemarker.content-type=text/html

#是否将HttpServletRequest中的属性添加到Model中
spring.freemarker.expose-request-attributes=false

#是否将HttpSession中的属性添加到Model中
spring.freemarker.expose-session-attributes=false

#模板文件后缀
spring.freemarker.suffix=.ftl

#模板文件位置
spring.freemarker.template-loader-path=classpath:/templates/

server.port=8099

配置控制器

Product.java

package com.shrimpking.pojo;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/3 12:33
 */
public class Product
{
    private int id;
    private String name;
    private String factory;

    public Product()
    {
    }

    public Product(int id, String name, String factory)
    {
        this.id = id;
        this.name = name;
        this.factory = factory;
    }

    public int getId()
    {
        return id;
    }

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

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getFactory()
    {
        return factory;
    }

    public void setFactory(String factory)
    {
        this.factory = factory;
    }

    @Override
    public String toString()
    {
        return "Product{" + "id=" + id + ", name='" + name + '\'' + ", factory='" + factory + '\'' + '}';
    }
}

ProductController.java

package com.shrimpking.controller;

import com.shrimpking.pojo.Product;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

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

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/3 12:34
 */
@Controller
public class ProductController
{
    @GetMapping("/product")
    public ModelAndView product()
    {
        //新建列表
        List<Product> products = new ArrayList<Product>();
        //创建商品
        Product p1 = new Product();
        p1.setId(1);
        p1.setName("桂花糕");
        p1.setFactory("河南中裕食品厂");
        Product p2 = new Product(2,"椰树椰汁","海南椰树椰汁有限公司");
        products.add(p1);
        products.add(p2);
        //创建回传视图
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("products",products);
        //设置前端视图页面名称
        modelAndView.setViewName("product");
        return modelAndView;

    }
}

创建视图按照配置文件,在resources/templates目录下创建product.ftl文件,内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>freemarker</title>
</head>
<body>
    <table border="1">
        <tr>
            <th>商品编号</th>
            <th>商品名称</th>
            <th>商品生产方</th>
        </tr>
        <#if products ??&&(products?size>0)>
            <#list products as product>
                <tr>
                    <td>${product.id}</td>
                    <td>${product.name}</td>
                    <td>${product.factory}</td>
                </tr>
            </#list>
        </#if>
    </table>
</body>
</html>

运行截图

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾米大王

有你的支持,我会更有动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值