Spring Boot 整合模板引擎 Freemaker、thymeleaf

时间:2022-11-17 17:36:23

1.常用的 Spring Boot 2.x 模板引擎和官方推荐案例

1)JSP(后端渲染,消耗性能)

Java Server Pages 动态网页技术,由应用服务器中的 JSP 引擎来编译和执行,再将生成的整个页面返回给客户端。优点是:可以写java代码、支持表达式语言(el、jstl)、内建函数。

但 JSP 本质上是 Servlet,它非常占用 JVM 内存。Java Web 官方推荐,但 Spring Boot 不推荐 https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-jsp-limitations

2)Freemarker

FreeMarker Template Language(FTL) 文件一般保存为 xxx.ftl。严格依赖 MVC 模式,不依赖 Servlet 容器(不占用JVM内存),支持内建函数

3)Thymeleaf (主推)

轻量级的模板引擎(负责逻辑业务的不推荐,解析 DOM 或者 XML 会占用多的内存)。可以直接在浏览器中打开且正确显示模板页面。直接是 html 结尾,可以直接编辑。

 

2.Spring Boot 整合模板引擎 freemarker

步骤1:引入 Freemarker 相关 maven 依赖

<!-- 引入freemarker模板引擎的依赖 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

步骤2:Freemarker 基础配置

# 是否开启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/

步骤3:新建 .ftl 文件

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
  </head>
  <body>
    <h1> ${setting.name} </h1>
    <h1> ${setting.domain} </h1>
  </body>
</html>

步骤4:简单测试代码编写和访问

@Controller
@RequestMapping("/freemaker")
public class FreemakerController {
    @Autowired
    private ServerSettings setting;
    
    @GetMapping("hello")
    public String index(ModelMap modelMap){
        
        modelMap.addAttribute("setting", setting);
        
        return "fm/index";  //不用加后缀,在配置文件里面已经指定了后缀
    }
}

 

3.Spring Boot 整合模板引擎 thymeleaf

官网地址:https://www.thymeleaf.org/doc/articles/thymeleaf3migration.html

步骤1:引入 thymeleaf 相关 maven 依赖

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

步骤2:thymeleaf 基础配置

#开发时关闭缓存,不然没法看到实时页面
spring.thymeleaf.cache=false
spring.thymeleaf.mode=HTML5
#前缀
spring.thymeleaf.prefix=classpath:/templates/
#编码
spring.thymeleaf.encoding=UTF-8
#类型
spring.thymeleaf.content-type=text/html
#名称的后缀
spring.thymeleaf.suffix=.html

步骤3:新建 .html 文件

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
  </head>
  <body>
    模板引擎整合thymeleaf  admin/info.html
    <h1 >测试内容,未加th表达式</h1>
    <h1 th:text="${setting.name}">测试内容</h1>
  </body>
</html>

步骤4:简单测试代码编写和访问

@Controller
@RequestMapping("/tyhmeleaf")
public class ThymeleafController {
    @Autowired
    private ServerSettings setting;

    @GetMapping("hello")
    public String index(){
        return "index";  //不用加后缀,在配置文件里面已经指定了后缀
    }
    
    @GetMapping("info")
    public String admin(ModelMap modelMap){
        modelMap.addAttribute("setting", setting); 
        return "admin/info";  //不用加后缀,在配置文件里面已经指定了后缀
    }
}

注意:$表达式只能写在th标签内部

快速入门:https://www.thymeleaf.org/doc/articles/standarddialect5minutes.html