Spring Boot 整合 Freemarker
这是一个相当老牌的开源的免费的模版引擎。通过 Freemarker 模版,我们可以将数据渲染成 HTML 网页、电子邮件、配置文件以及源代码等。Freemarker 不是面向最终用户的,而是一个 Java 类库,我们可以将之作为一个普通的组件嵌入到我们的产品中。 |
来看一张来自 Freemarker 官网的图片:
可以看到,Freemarker 可以将模版和数据渲染成 HTML 。
Freemarker 模版后缀为 .ftl(FreeMarker Template Language)。FTL 是一种简单的、专用的语言,它不是像 Java 那样成熟的编程语言。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。
好了,这是一个简单的介绍,接下来我们来看看 Freemarker 和 Spring Boot 的一个整合操作。
实践
在 SSM 中整合 Freemarker ,所有的配置文件加起来,前前后后大约在 50 行左右,Spring Boot 中要几行配置呢? 0 行!
1.创建工程
首先创建一个 Spring Boot 工程,引入 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>
工程创建完成后,在 org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration 类中,可以看到关于 Freemarker 的自动化配置:
@Configuration @ConditionalOnClass({ freemarker.template.Configuration.class, FreeMarkerConfigurationFactory.class }) @EnableConfigurationProperties(FreeMarkerProperties.class) @Import({ FreeMarkerServletWebConfiguration.class, FreeMarkerReactiveWebConfiguration.class,FreeMarkerNonWebConfiguration.class }) public class FreeMarkerAutoConfiguration { }
从这里可以看出,当 classpath 下存在 freemarker.template.Configuration 以及 FreeMarkerConfigurationFactory 时,配置才会生效,也就是说当我们引入了 Freemarker 之后,配置就会生效。但是这里的自动化配置只做了模板位置检查,其他配置则是在导入的 FreeMarkerServletWebConfiguration 配置中完成的。那么我们再来看看 FreeMarkerServletWebConfiguration 类,部分源码如下:
@Configuration @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) @ConditionalOnClass({ Servlet.class, FreeMarkerConfigurer.class }) @AutoConfigureAfter(WebMvcAutoConfiguration.class) class FreeMarkerServletWebConfiguration extends AbstractFreeMarkerConfiguration {protected FreeMarkerServletWebConfiguration(FreeMarkerProperties properties) {super(properties);}@Bean@ConditionalOnMissingBean(FreeMarkerConfig.class)public FreeMarkerConfigurer freeMarkerConfigurer() {FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();applyProperties(configurer);return configurer;}@Bean@ConditionalOnMissingBean(name = "freeMarkerViewResolver")@ConditionalOnProperty(name = "spring.freemarker.enabled", matchIfMissing = true)public FreeMarkerViewResolver freeMarkerViewResolver() {FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();getProperties().applyToMvcViewResolver(resolver);return resolver;} }
在这个类的构造方法中,注入了 FreeMarkerProperties:
@ConfigurationProperties(prefix = "spring.freemarker") public class FreeMarkerProperties extends AbstractTemplateViewResolverProperties {public static final String DEFAULT_TEMPLATE_LOADER_PATH = "classpath:/templates/";public static final String DEFAULT_PREFIX = "";public static final String DEFAULT_SUFFIX = ".ftl";/*** Well-known FreeMarker keys which are passed to FreeMarker's Configuration.*/private Map settings = new HashMap<>(); }
FreeMarkerProperties 中则配置了 Freemarker 的基本信息,例如模板位置在 classpath:/templates/ ,再例如模板后缀为 .ftl,那么这些配置我们以后都可以在 application.properties 中进行修改。
如果我们在 SSM 的 XML 文件中自己配置 Freemarker ,也不过就是配置这些东西。现在,这些配置由 FreeMarkerServletWebConfiguration 帮我们完成了。
2.创建类
首先我们来创建一个 User 类,如下:
public class User {private Long id;private String username;private String address;//省略 getter/setter }
再来创建 UserController:
@Controller public class UserController {@GetMapping("/index")public String index(Model model) {List users = new ArrayList<>();for (int i = 0; i < 10; i++) {User user = new User();user.setId((long) i);user.setUsername("javaboy>>>>" + i);user.setAddress("www.javaboy.org>>>>" + i);users.add(user);}model.addAttribute("users", users);return "index";} }
最后在 freemarker 中渲染数据:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <table border="1"><tr><td>用户编号</td><td>用户名称</td><td>用户地址</td></tr><#list users as user><tr><td>${user.id}</td><td>${user.username}</td><td>${user.address}</td></tr></#list> </table> </body> </html>
运行效果如下:
其他配置
如果我们要修改模版文件位置等,可以在 application.properties 中进行配置:
spring.freemarker.allow-request-override=false spring.freemarker.allow-session-override=false spring.freemarker.cache=false spring.freemarker.charset=UTF-8 spring.freemarker.check-template-location=true spring.freemarker.content-type=text/html spring.freemarker.expose-request-attributes=false spring.freemarker.expose-session-attributes=false spring.freemarker.suffix=.ftl spring.freemarker.template-loader-path=classpath:/templates/
好了,整合完成之后,Freemarker 的更多用法,就和在 SSM 中使用 Freemarker 一样了,这里我就不再赘述。
Spring Boot 整合 Freemarker相关推荐
- freemarker ftl模板_Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker
今天来聊聊 Spring Boot 整合 Freemarker. Freemarker 简介 这是一个相当老牌的开源的免费的模版引擎.通过 Freemarker 模版,我们可以将数据渲染成 HTML ...
- Spring Boot 整合 FreeMarker 实例
前言 在之前的文章Spring Boot 整合 Thymeleaf中,我们学习了如何将模板 Thymeleaf 整合到 Spring Boot 中,那今天我们就来看看,另一个老牌的开源免费模板引擎 - ...
- Spring Boot整合Freemarker
目录 Freemarker模板 导入 Freemarker模板 Freemarker自动化配置 创建类说明 其他配置 直接输出值 输出变量 其他常见表达式 常见内置函数 常见指令 宏 Freemark ...
- spring boot整合freemarker及freemarker基础语法超详细讲解
采用模板+数据=HTML 实现页面的静态化. 也就是服务端的页面静态化技术. JSP/Freemarker/Thymeleaf是常见的模板引擎. 引依赖 okhttp与HttpClient一样的作用, ...
- java 模板引擎_极简 Spring Boot 整合 Thymeleaf 页面模板
点击"牧码小子"关注,和众多大牛一起成长! 关注后,后台回复 java ,领取松哥为你精心准备的技术干货! 虽然现在慢慢在流行前后端分离开发,但是据松哥所了解到的,还是有一些公司在 ...
- spring boot整合spring security笔记
最近自己做了一个小项目,正在进行springboot和spring Security的整合,有一丢丢的感悟,在这里分享一下: 首先,spring boot整合spring security最好是使用T ...
- RabbitMQ使用及与spring boot整合
1.MQ 消息队列(Message Queue,简称MQ)--应用程序和应用程序之间的通信方法 应用:不同进程Process/线程Thread之间通信 比较流行的中间件: ActiveMQ Rabbi ...
- Spring Boot 教程(三): Spring Boot 整合Mybatis
教程简介 本项目内容为Spring Boot教程样例.目的是通过学习本系列教程,读者可以从0到1掌握spring boot的知识,并且可以运用到项目中.如您觉得该项目对您有用,欢迎点击收藏和点赞按钮, ...
- 五、spring boot整合mybatis-plus
spring boot整合mybatis-plus 简介 mybatis 增强工具包,简化 CRUD 操作. 文档 http://mp.baomidou.com http://mybatis.plus ...
最新文章
- Python安装MySQL库详解(解决Microsoft Visual C++ 9.0 is required )
- Java类名.方法和变量
- 借个iPad玩玩,越狱4.2.1成功
- WeChat.app debuger
- BufferedWriter 和 BufferedReader 的基本用法,附演示程序。以及一个复制文本文件的程序
- 野生前端的数据结构基础练习(4)——字典
- python统计数据库中每个数的个数,如何统计每个数据库中每个集合中的文档数?...
- matlab 三对角矩阵 追赶法,追赶法求解三对角方程及其算例.doc
- 大数据计算技术架构解析
- np.ones(),np.zeros(), np.empty(),np.full(),np.ones_like() 基本用法
- 数字中国城市巡礼之杭州,让城市长出“神经系统”
- 并发控制五(封锁的粒度)
- NLP 模型压缩方法综述
- 如何更新谷歌chrome浏览器
- IT职业病预防之颈椎病(一)
- python语言是干什么的-python语言可以干什么
- SS2H框架搭建,基础上篇
- 牛客网练习,某公司2017秋招 叫车 2017年
- 避暑山庄消失的三十六景,曾经那么美!
- git checkout恢复文件