springbootfreemarker前后端分离(SpringBoot中Thymeleaf和Freemarker模板引擎的区别)
springbootfreemarker前后端分离(SpringBoot中Thymeleaf和Freemarker模板引擎的区别)4、内置大量常用功能,使用非常方便3、对jsp标签支持良好优点:1、不能编写java代码,可以实现严格的mvc分离2、性能非常不错
目录- 前言
- Thymeleaf和Freemarker的区别
- 配置文件
- pom.xml
- application.yml
- Thymeleaf
- Freemarker
- 后记
这两个都是属于模板引擎,但是各有各的好处,
enn 在市面上比较多的也就是jsp、freemarker、velocity、thymeleaf等页面方案。
Thymeleaf和Freemarker的区别FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。
目前企业中:主要用Freemarker做静态页面或是页面展示
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能非常不错
3、对jsp标签支持良好
4、内置大量常用功能,使用非常方便
5、宏定义(类似jsp标签)非常方便
6、使用表达式语言
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多
Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用。
Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(文档对象模型)上执行预先制定好的逻辑。Thymeleaf的可扩展性也非常棒。你可以使用它定义自己的模板属性集合,这样就可以计算自定义表达式并使用自定义逻辑。这意味着Thymeleaf还可以作为模板引擎框架。
thymeleaf优点:静态html嵌入标签属性,浏览器可以直接打开模板文件,便于前后端联调。
配置文件
pom.xml
<!--thymeleaf模块引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--freemarker模块引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifa
ctId>spring-boot-starter-freemarker</artifactId>
</dependency>
application.yml
server:
port: 81
servlet:
context-path: /sss
buser:
name: ls
pwd: 123
age: 19
spring:
thymeleaf:
cache: false
freemarker:
# 设置模板后缀名
suffix: .ftl
# 设置文档类型
content-type: text/html
# 设置页面编码格式
charset: UTF-8
# 设置页面缓存
cache: false
# 设置ftl文件路径,
template-loader-path: classpath:/templates
mvc:
static-path-pattern: /static/**
Thymeleaf
大量的数据我暂时不会去实验,如今只有一小部分:
参考:Thymeleaf的基本语法(https://juejin.im/post/5c271fbde51d451b1c6ded58)
thymeleaflist.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2 >1、传普通值(String)</h2>
<span th:text="${uname}" ></span>
<h2>2、传集合(list)</h2>
<table>
<tr>
<td>用户名字</td>
<td>用户密码</td>
<td>用户年龄</td>
</tr>
<tr th:each="u : ${userList}">
<td th:text="${u.name}"></td>
<td th:text="${u.pwd}"></td>
<td th:text="${u.age}"></td>
</tr>
</table>
<select>
<option th:each="user :${userList}" th:value="${user.name}" th:text="${user.name}" ></option>
</select>
<h2>3、传一个html页面代码过来</h2>
<span th:utext="${tohtml}" ></span>
</body>
</html>
thymeleafcontroller.java
package com.liwangwang.springboot.controller;
import com.liwangwang.springboot.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.ArrayList;
import java.util.List;
@Controller
@RequestMapping("thymeleaf")
public class thymeleafController {
private ModelAndView modelAndView;
@RequestMapping("list")
public ModelAndView list(){
modelAndView = new ModelAndView();
//一、简单传值String
modelAndView.addObject("uname" "李四");
//二、传list集合
List list = new ArrayList();
list.add(new User("李四" "123" 18));
list.add(new User("王五" "123" 19));
list.add(new User("小明" "123" 20));
modelAndView.addObject("userList" list);
//三、传一个html页面
modelAndView.addObject("tohtml" "<span style='color:red;'>这是thymeleaf的html页面</span>");
modelAndView.setViewName("thymeleaflist");
return modelAndView;
}
}
Freemarker
学习网站 Freemarker的基本语法(https://juejin.im/post/5b598eccf265da0f4e62dfbc)
freemarkerlist.ftl
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2 >1、传普通值(String)</h2>
${rname}
<h2>2、传集合(list)</h2>
<table border="1px" width="60%">
<tr>
<td>角色id</td>
<td>角色名字</td>
</tr>
<#list roleList as role >
<tr>
<td>${role.rid}</td>
<td>${role.rname}</td>
</tr>
</#list>
</table>
<h2>3、包含内容</h2>
<#include 'common/header.ftl' >
<#include 'common/global.ftl' >
<h2>4、如何获取项目名</h2>
${springMacroRequestContext.contextPath}
<h2>5、如何定义局部变量(assign)/全局变量(global)</h2>
<#assign ww1>
${springMacroRequestContext.contextPath}
</#assign>
<#global ww2>
${springMacroRequestContext.contextPath}
</#global>
${ww1}和${ww2}
</body>
</html>
freemarkerController.java
package com.liwangwang.springboot.controller;
import com.liwangwang.springboot.entity.Role;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.ArrayList;
import java.util.List;
@Controller
@RequestMapping("freemarker")
public class freemarkerController {
private ModelAndView modelAndView;
@RequestMapping("list")
public ModelAndView list(){
modelAndView = new ModelAndView();
//一、简单传值String
modelAndView.addObject("rname" "李四");
//二、传list集合
List list = new ArrayList();
list.add(new Role("1" "用户"));
list.add(new Role("2" "会员"));
list.add(new Role("3" "管理员"));
modelAndView.addObject("roleList" list);
//三、传一个html页面
modelAndView.addObject("tohtml" "<span style='color:red;'>这是thymeleaf的html页面</span>");
modelAndView.setViewName("freemarkerlist");
return modelAndView;
}
}
后记
这个是讲是讲不完的,可以去查看官网文档和这两篇:
Thymeleaf:学习网站https://juejin.im/post/5c271fbde51d451b1c6ded58
Freemarker:学习网站 https://juejin.im/post/5b598eccf265da0f4e62dfbc
专注于技术热点大数据,人工智能,JAVA、Python、 C 、GO、Javascript等语言最新前言技术,及业务痛点问题分析,请关注【编程我最懂】共同交流学习。