springboot中Thymeleaf和Freemarker模板引擎的区别

目录

  • 前言
    • 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嵌入标签属性,浏览器可以直接打开模板文件,便于前后端联调。


配置文件

springboot中Thymeleaf和Freemarker模板引擎的区别_第1张图片

pom.xml


        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-thymeleafartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-freemarkerartifactId>
        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的基本语法

thymeleaflist.html


<html  xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
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;

/**
 * @authorliwangwang
 * @site www.liwangwang.com
 * @company xxx公司
 * @create 2019-11-08 11:29
 */
@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","这是thymeleaf的html页面");

        modelAndView.setViewName("thymeleaflist");
        return modelAndView;
    }

}

Freemarker

学习网站 Freemarker的基本语法

freemarkerlist.ftl


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>

<h2 >1、传普通值(String)h2>
${rname}

<h2>2、传集合(list)h2>
<table border="1px" width="60%">
    <tr>
        <td>角色idtd>
        <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;

/**
 * @authorliwangwang
 * @site www.liwangwang.com
 * @company xxx公司
 * @create 2019-11-08 15:49
 */
@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","这是thymeleaf的html页面");

        modelAndView.setViewName("freemarkerlist");
        return modelAndView;
    }



}

后记

这个是讲是讲不完的,可以去查看官网文档和这两篇:

Thymeleaf:学习网站https://juejin.im/post/5c271fbde51d451b1c6ded58
Freemarker:学习网站 https://juejin.im/post/5b598eccf265da0f4e62dfbc

你可能感兴趣的:(#,springboot)