SpringBoot整合Freemarker使用
时间:2022-07-22
本文章向大家介绍SpringBoot整合Freemarker使用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
模版引擎对比说明
在Java里面常用的模版引擎有很多, 例如: jsp
、Freemarker
、Thymeleaf
等
我们来对比一下各个模版引擎.
- JSP(后端渲染,消耗性能)
Java Server Pages
动态网页技术,由应用服务器中的JSP
引擎来编译和执行,再将生成的整个页面返回给客户端,可以写java
代码,持表达式语言(el
、jstl
),内建函数,但是占用JVM
内存。 是javaweb
官方推荐, 但springboot
不推荐
附上官方文档说明
https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-jsp-limitations
- Freemarker
FreeMarker Template Language(FTL)
文件一般保存为xxx.ftl
严格依赖MVC
模式,不依赖Servlet
容器(不占用JVM内存),内建函数 - Thymeleaf (主推)
轻量级的模板引擎(负责逻辑业务的不推荐,解析
DOM
或者XML
会占用多的内存) 可以直接在浏览器中打开且正确显示模板页面,直接是html
结尾,直接编辑
整合Freemarker
- 增加依赖 pom.xml
<!-- 引入freemarker模板引擎的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
- 配置Freemarker application.properties
# 是否开启thymeleaf缓存,本地为false,生产建议为true
spring.freemarker.cache=false
spring.freemarker.charset=UTF-8
spring.freemarker.allow-request-override=false
spring.freemarker.check-template-location=true
#类型
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=true
spring.freemarker.expose-session-attributes=true
#文件后缀
spring.freemarker.suffix=.ftl
#路径
spring.freemarker.template-loader-path=classpath:/templates/
- 编写路由 AopppController.java
@RequestMapping("/fm/index")
public String fmIndex(ModelMap modelMap) {
Map<String, String> map = new HashMap<>();
map.put("name", "aoppp");
map.put("desc", "描述");
// 添加属性 给模版
modelMap.addAttribute("user", map);
return "fm/index";
}
- 编写模版 templates/fm/index.ftl
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<h1>dhsajdhkjks</h1>
<span>name ===</span><span> ${user.name} </span>
<span>desc ===</span><span> ${user.desc} </span>
</body>
</html>
- 效果
- 揭密微信跳一跳小游戏那些外挂
- 特斯拉出现人才流失潮,竟因为一些工程师认为Autopilot自动驾驶技术并不安全
- 微信又更新了,这次放出年度大招!新变化让不少人拍手叫好!
- “JINAN”:未来电动汽车边跑边充电
- Bagging算法
- 基于Region Proposal的深度学习目标检测简述(一)
- 10大数据挖掘算法及其简介
- SpringMVC返回图片的几种方式
- 区块链技术3.0来了,靠谱吗,看看区块链技术3.0能干啥
- SpringMVC支持跨域的几种姿势
- 万达回应网科裁员:系局部调整
- SpringMVC之请求参数的获取方式
- Burst Coin-挖矿原理介绍
- 机器人不懂感情?错!孙正义的这款AI做到了!
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 【DB笔试面试842】在Oracle中,如何启动Oracle数据库的监听日志?
- 【揭秘】C语言类型转换时发生了什么?
- JUC学习之8锁现象
- TensorFlow惊现大bug?网友:这是逼着我们用PyTorch啊!
- 机器学习|用Q-Learning走迷宫
- C++设计模式笔记(03-02) - Template Method_模板方法(下)
- 从零开始学习华为路由交换 | OSPF修改计时器
- 【没落的985/211】Python爬取知乎8万字回答进行高校分析
- LinkedBlockingQueue源码学习
- 三歪吐血总结了各个中间件是如何实现持久化的
- ThreadPoolExecutor源码学习
- Docker六脉神剑(四) 使用Docker-Compose进行服务编排搭建lnmp环境
- 干的想喝水,一篇文章带你读懂硬盘工作原理!
- 微信小程序开发实战(11):滚动组件(picker)
- Docker六脉神剑 (五) Docker Swarm集群搭建及基础服务部署