首页 > 其他分享 >Springboot整合freemarker

Springboot整合freemarker

时间:2022-10-09 20:07:35浏览次数:73  
标签:Springboot freemarker spring 配置 public 整合 class 模板


一、概述

FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。

Springboot整合freemarker_spring

这种方式通常被称为 ​​MVC (模型 视图 控制器) 模式​​,对于动态网页来说,是一种特别流行的模式。 它帮助从开发人员(Java 程序员)中分离出网页设计师(HTML设计师)。设计师无需面对模板中的复杂逻辑, 在没有程序员来修改或重新编译代码时,也可以修改页面的样式。

这篇文章主要介绍Springboot整合FreeMarker,具体关于FreeMarker更详细文档:

1.官网地址:

​http://freemarker.foofun.cn/index.html​

2.自己总结的文章地址


二、springboot整合freemarker

首先创建一个 Spring Boot 工程,引入 Freemarker 依赖,如下图:

Springboot整合freemarker_html_02

<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的自动化配置在​​org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration​​ 类中

@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;
}
}

我们来简单看下这段源码:

  1. @ConditionalOnWebApplication 表示当前配置在 web 环境下才会生效。
  2. ConditionalOnClass 表示当前配置在存在 Servlet 和 FreeMarkerConfigurer 时才会生效。
  3. @AutoConfigureAfter 表示当前自动化配置在 WebMvcAutoConfiguration 之后完成。
  4. 代码中,主要提供了 FreeMarkerConfigurer 和 FreeMarkerViewResolver。
  5. FreeMarkerConfigurer 是 Freemarker 的一些基本配置,例如 templateLoaderPath、defaultEncoding 等
  6. FreeMarkerViewResolver 则是视图解析器的基本配置,包含了viewClass、suffix、allowRequestOverride、allowSessionOverride 等属性。

另外还有一点,在这个类的构造方法中,注入了 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<String, String> settings = new HashMap<>();
}

FreeMarkerProperties 中则配置了 Freemarker 的基本信息,例如模板位置在 ​​classpath:/templates/​​​ ,再例如模板后缀为 ​​.ftl​​,这个模板后缀可以自定义,那么这些配置我们以后都可以在 application.properties 中进行修改。

如果我们在 SSM 的 XML 文件中自己配置 Freemarker ,也不过就是配置这些东西。现在,这些配置由 FreeMarkerServletWebConfiguration 帮我们完成了。

 

数据渲染

<!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配置文件中选择配置

#HttpServletRequest的属性是否可以覆盖controller中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
#Content-Type的值
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/


标签:Springboot,freemarker,spring,配置,public,整合,class,模板
From: https://blog.51cto.com/u_11334685/5741224

相关文章

  • springboot高级——消息队列相关
    写在前边:本文学习尚硅谷的springboot高级整理笔记。消息队列是什么,有什么好处?通过异步处理提高系统性能和削峰、降低系统耦合性。目前使用较多的消息队ActiveMQ,RabbitMQ,Kafk......
  • SSM整合
    学习文档:https://blog.csdn.net/zengwei1973/article/details/105424888ssm整合步骤:       1.环境ssm整合之mybatis2.建数据库CREATEDATABASE`ssmbu......
  • 【SpringBoot】解决redis 查找/删除缓存失败问题
     使用StringRedisTemplate.delete(key) 删除缓存数据失败,原因是序列化问题导致。 需要把key和hash都使用String的序列化方式 解决方法:创建一个新的配置类:@Con......
  • springboot——数据访问——JPA
      在有了springdata以后,给我们提供好了访问数据的解决方案。 如果之前使用过hibernate,你肯定也好奇,hibernate里边有级联操作。你可能跟我一样关心springboot 如何去做级......
  • springboot——数据访问——Druid&配置数据源监控
     在开发中会用Druid,因为它有成套的数据源监控想要使用需要做以下的操作: 在pom文件中引入依赖在application.yml里边添加配置想要在yml里边配置更多,则需要: 但是这并不能起......
  • springboot——数据访问——整合mybatis
    springboot没有直接提供和mybatis对接的stater,但是mybatis自己提供了整合的。想要在springboot中使用mybatis还是方便的。步骤:可以在创建项目的时候就直接勾选住依赖,也可以......
  • Springboot整合RestTemplate发送http请求
    据技术选型总结常见的三种方式发送http请求,本文介绍Springboot整合RestTemplate发送http请求方式,其他两种如下链接java原生发送http请求_程序三两行的博客HttpClient和OkHtt......
  • freemarker使用总结
    目录​​为什么使用freemarker​​​​简单的Freemarker测试​​​​Freemarker语法​​​​访问Map中的key​​​​访问POJO中的属性​​​​访问集合中的数据​​​​if判......
  • Springboot如何发送邮件
    邮件发送过程简介依赖 配置文件可以配置的属性值例如[email protected]=123456#授权码spring.mail.host=smtp.qq.com#smtp地址spring......
  • 从SpringBoot启动,阅读源码设计
    服务启动堪称Spring源码设计的答案;一、背景说明初学SpringBoot框架时,第一次启动服务,直呼什么鬼?只需要简单的几步配置,几个核心的注解,就可以快速实现工程的搭建和运行;虽......