Thymeleaf模板引擎

2023-11-02

1 thymeleaf简介

1.1 什么是thymeleaf

​ Thymeleaf是适用于Web和独立环境的现代服务器端Java模板引擎,能够处理HTML,XML,JavaScript,CSS甚至纯文本。

​ Thymeleaf的主要目标是提供一种优雅且高度可维护的模板创建方法。为此,它以自然模板的概念为基础,以不影响模板用作设计原型的方式将其逻辑注入模板文件。这样可以改善设计沟通,并缩小设计团队与开发团队之间的差距。

1.2 thymeleaf可以处理那些模板

​ 开箱即用的Thymeleaf可以处理六种模板,每种模板都称为模板模式

  1. HTML模板
  2. XML格式
  3. 文本格式
  4. JAVASCRIPT格式
  5. CSS格式
  6. 原生的文本

1.3 特点

  • 动静结合:Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。
  • 开箱即用:它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
  • 多方言支持:Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
  • 与SpringBoot完美整合,SpringBoot提供了Thymeleaf的默认配置,并且为Thymeleaf设置了视图解析器,我们可以像以前操作jsp一样来操作Thymeleaf。代码几乎没有任何区别,就是在模板语法上有区别。

2 环境准备

2.1 创建一个springboot项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-72T48hCn-1620116100586)(C:\Users\99226\Desktop\img\1620031015924.png)]

2.2 导入相关依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.thymeleaf</groupId>
    <artifactId>stydy-thymeleaf</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <!--继承父工程 spring boot-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/>
    </parent>

    <!--项目编码方式-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <!--导入相关依赖-->
    <dependencies>
        <!--thymeleaf起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!--springMVC起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--spring测试类起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--lombok 代码模板-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>

2.3 快速起步

1 创建启动器

/**
 * 启动器
 * @Author: CodeBull
 * @Date: 2021/5/3
 * @version: 1.0
 */
@SpringBootApplication
public class ThymeleafApplication {
    public static void main(String[] args) {
        SpringApplication.run(ThymeleafApplication.class, args);
    }
}

2 创建controller

/**
 * 欢迎页面控制器
 *
 * @Author: CodeBull
 * @Date: 2021/5/3
 * @version: 1.0
 */
@Controller
public class WelcomeController {

    @Autowired
    private WelcomeService welcomeService;

    /**
     * 响应欢迎页面
     * @param model 响应数据
     * @return welcome欢迎页面
     */
    @GetMapping("/welcome")
    public String welcome(Model model) {
        model.addAttribute("welcome", welcomeService.welcome());
        return "welcome";
    }
}

3 创建service层

创建相关接口及其实现类

/**
 * 逻辑层接口
 *
 * @Author: CodeBull
 * @Date: 2021/5/3
 * @version: 1.0
 */
public interface WelcomeService {
    /**
     * 欢迎页面相关逻辑
     * @return 欢迎语
     */
    public String welcome();
}
/**
 * 欢迎页面逻辑层实现
 *
 * @Author: CodeBull
 * @Date: 2021/5/3
 * @version: 1.0
 */
@Service
public class WelcomeServiceImpl implements WelcomeService {
    @Override
    public String welcome() {
        return "Hello,Thymeleaf!";
    }
}

4 创建相关视图

​ 在resources/templates目录下创建,且讲html的命名空间修改为

 xmlns:th="http://www.thymeleaf.org"
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>欢迎页面</title>
</head>
<body>
    <h1 th:text="${welcome}">默认数据</h1>
</body>
</html>

5 效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5UyHxSxH-1620116100588)(C:\Users\99226\Desktop\img\1620032921374.png)]

6 解释

启动器中的默认设置

  • 默认前缀:classpath:/templates/
  • 默认后缀:.html

3 数据类型

3.1 基本数据类型

controller:

/**
 * 测试基本数据类型
 * @param modelMap 数据流转
 * @return 基本数据类型测试页
 */
@GetMapping("/testComType")
public String testComType(ModelMap modelMap) {
    modelMap.addAttribute("title", "基本数据类型测试");
    //整型
    modelMap.addAttribute("int", 100);
    //浮点型
    modelMap.addAttribute("double", 3.14);
    //字符型
    modelMap.addAttribute("string", "测试数据");
    //布尔型
    modelMap.addAttribute("boolean", false);
    return "testComType";
}

html:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>欢迎页面</title>
</head>
<body>
    <h1 th:text="${title}">默认数据</h1>

    <h3>整型:</h3>
    <h4 th:text="${int}"></h4>
    <h3>浮点型:</h3>
    <h4 th:text="${double}"></h4>
    <h3>字符型:</h3>
    <h4 th:text="${string}"></h4>
    <h3>布尔型:</h3>
    <h4 th:text="${boolean}"></h4>
</body>
</html>

效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tSb6PfWf-1620116100588)(C:\Users\99226\Desktop\img\1620053414089.png)]

3.2 集合数据类型

controller:

/**
 * 测试集合数据类型
 * @param modelMap 数据流转
 * @return 集合数据类型测试页
 */
@GetMapping("/testCollectionType")
public String testCollectionType(ModelMap modelMap) {
    modelMap.addAttribute("title", "集合数据类型测试");
    //list集合测试
    ArrayList<Integer> list = new ArrayList<>();
    list.add(100);
    list.add(200);
    list.add(300);
    modelMap.addAttribute("list", list);
    //map集合测试
    HashMap<String, String> map = new HashMap<>();
    map.put("one", "测试元素一");
    map.put("two", "测试元素二");
    map.put("three", "测试元素三");
    modelMap.addAttribute("map", map);
    return "testCollectionType";
}

html:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>欢迎页面</title>
</head>
<body>
    <h1 th:text="${title}">默认数据</h1>
    <h3>list集合测试</h3>
    <table>
        <tr>
            <th>序号</th><th>元素</th>
        </tr>
        <tr>
            <td>1</td><td th:text="${list[0]}">暂无数据</td>
        </tr>
        <tr>
            <td>2</td><td th:text="${list[1]}">暂无数据</td>
        </tr>
        <tr>
            <td>3</td><td th:text="${list[2]}">暂无数据</td>
        </tr>
    </table>
    <h3>map集合测试</h3>
    <table>
        <tr>
            <th>key</th><th>value</th>
        </tr>
        <tr>
            <td>one</td><td th:text="${map['one']}"></td>
        </tr>
        <tr>
            <td>two</td><td th:text="${map['two']}"></td>
        </tr>
        <tr>
            <td>three</td><td th:text="${map['three']}"></td>
        </tr>
    </table>
</body>
</html>

效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mysvu34b-1620116100591)(C:\Users\99226\Desktop\img\1620054902242.png)]

3.3 JavaBean数据类型

controller:

/**
 * 测试JavaBean类型数据
 * @param modelMap 数据流转
 * @return JavaBean数据类型测试页
 */
@GetMapping("testBeanType")
public String testBeanType(ModelMap modelMap) {
    modelMap.addAttribute("title", "JavaBean数据类型测试");
    Student student = new Student(1, "张三", 18);
    modelMap.addAttribute("student", student);
    return "testBeanType";
}

html:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>欢迎页面</title>
</head>
<body>
    <h1 th:text="${title}">默认数据</h1>
    <h3>list集合测试</h3>
    <table>
        <tr>
            <th>学号</th><th>姓名</th><th>年龄</th>
        </tr>
        <tr>
            <td th:text="${student.getId()}">暂无数据</td>
            <td th:text="${student.getName()}">暂无数据</td>
            <td th:text="${student.getAge()}">暂无数据</td>
        </tr>
        <td th:text="${student.id}">暂无数据</td>
        <td th:text="${student.name}">暂无数据</td>
        <td th:text="${student.age}">暂无数据</td>
        </tr>
    </table>
</body>
</html>

效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ATxkLjBG-1620116100593)(C:\Users\99226\Desktop\img\1620112871682.png)]

3.4 自定义变量

​ 当数据量比较多的时候,频繁的写student.就会非常麻烦。

​ 因此,Thymeleaf提供了自定义变量来解决:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>欢迎页面</title>
</head>
<body>
    <h1 th:text="${title}">默认数据</h1>
    <h3>list集合测试</h3>
    <table>
        <tr>
            <th>学号</th><th>姓名</th><th>年龄</th>
        </tr>
        <tr th:object="${student}">
            <td th:text="*{id}">暂无数据</td>
            <td th:text="*{name}">暂无数据</td>
            <td th:text="*{age}">暂无数据</td>
        </tr>
    </table>
</body>
</html>

4 方法

ognl表达式本身就支持方法调用,例如:

<h2 th:object="${student}">
    <p>FirstName: <span th:text="*{name.split(' ')[0]}">Jack</span>.</p>
    <p>LastName: <span th:text="*{name.split(' ')[1]}">Li</span>.</p>
</h2>

4.1 环境相关对象

对象 作用
#ctx 获取Thymeleaf自己的Context对象
#requset 如果是web程序,可以获取HttpServletRequest对象
#response 如果是web程序,可以获取HttpServletReponse对象
#session 如果是web程序,可以获取HttpSession对象
#servletContext 如果是web程序,可以获取HttpServletContext对象

4.2 全局对象

对象 作用
#dates 处理java.util.date的工具对象
#calendars 处理java.util.calendar的工具对象
#numbers 用来对数字格式化的方法
#strings 用来处理字符串的方法
#bools 用来判断布尔值的方法
#arrays 用来处理数组的方法
#lists 用来处理List集合的方法
#sets 用来处理set集合的方法
#maps 用来处理map集合的方法

4.3 字面量

​ 有的时候,我们需要在指令中填写基本类型如:字符串、数值、布尔等,并不希望被Thymeleaf解析为变量,这个时候称为字面值。

4.3.1 字符串字面值

使用一对单引号引用的内容就是字符串字面值了:

<p>
  你正在观看 <span th:text="'thymeleaf'">template</span> 的字符串常量值.
</p>

4.3.2 数字字面量

数字不需要任何特殊语法,而且可以直接进行算术运算:

<p>今年是 <span th:text="2021">1970</span>.</p>
<p>两年后将会是 <span th:text="2021 + 2">1972</span>.</p>

4.3.3 布尔字面值

布尔类型的字面值是true或false:

<div th:if="true">	<!--这里引用了一个th:if指令,跟vue中的v-if类似,判断-->
    你填的是true
</div>

4.4 拼接

普通字符串与表达式拼接的情况:

<span th:text="'欢迎您:' + ${user.name} + '!'"></span>

字符串字面值需要用'',拼接起来非常麻烦,Thymeleaf对此进行了简化,使用一对|即可:

<span th:text="|欢迎您:${user.name}|"></span>

与上面是完全等效的,这样就省去了字符串字面值的书写。

5 运算

​ 需要注意:${}内部的是通过OGNL表达式引擎解析的,外部的才是通过Thymeleaf的引擎解析,因此运算符尽量放在${}外进行。

5.1 算术运算

支持的算术运算符:+ - * / %

<span th:text="${user.age}"></span>
<span th:text="${user.age}%2 == 0"></span>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gOCXADk4-1620116100594)(file:///D:/为知笔记笔记存储/temp/7f6d4cf3-d40f-434b-a95e-17b351d36980/128/index_files/1526959990356.png)]

5.2 比较运算

支持的比较运算:>, <, >= and <= ,但是>, <不能直接使用,因为xml会解析为标签,要使用别名。

注意 == and !=不仅可以比较数值,类似于equals的功能。

可以使用的别名:gt (>), lt (<), ge (>=), le (<=), not (!). Also eq (==), neq/ne (!=).

5.3 条件运算

三元运算

<span th:text="${user.sex} ? '':''"></span>

三元运算符的三个部分:conditon ? then : else

  • condition:条件

  • then:条件成立的结果

  • else:不成立的结果

5.4 默认值

有的时候,我们取一个值可能为空,这个时候需要做非空判断,可以使用 表达式 ?: 默认值简写:

<span th:text="${user.name} ?: '二狗'"></span>

当前面的表达式值为null时,就会使用后面的默认值。

注意:?:之间没有空格。

6 逻辑判断

6.1 if-else

有了if和else,我们能实现一切功能_

Thymeleaf中使用th:if 或者 th:unless ,两者的意思恰好相反。

<span th:if="${user.age} < 24">小鲜肉</span>

如果表达式的值为true,则标签会渲染到页面,否则不进行渲染。

以下情况被认定为true:

  • 表达式值为true
  • 表达式值为非0数值
  • 表达式值为非0字符
  • 表达式值为字符串,但不是"false","no","off"
  • 表达式不是布尔、字符串、数字、字符中的任何一种

其它情况包括null都被认定为false

6.2 分支判断

这里要使用两个指令:th:switchth:case

<div th:switch="${user.role}">
  <p th:case="'admin'">管理员</p>
  <p th:case="'manager'">经理</p>
  <p th:case="*">其他角色</p>
</div>

需要注意的是,一旦有一个th:case成立,其它的则不再判断。与java中的switch是一样的。

另外th:case="*"表示默认,放最后。

7 循环

循环也是非常频繁使用的需求,我们使用th:each指令来完成:

假如有用户的集合:users在Context中。

<tr th:each="user : ${users}">
    <td th:text="${user.name}">Onions</td>
    <td th:text="${user.age}">2.41</td>
</tr>
  • ${users} 是要遍历的集合,可以是以下类型:
    • Iterable,实现了Iterable接口的类
    • Enumeration,枚举
    • Interator,迭代器
    • Map,遍历得到的是Map.Entry
    • Array,数组及其它一切符合数组结果的对象

在迭代的同时,我们也可以获取迭代的状态对象:

<tr th:each="user,stat : ${users}">
    <td th:text="${user.name}">Onions</td>
    <td th:text="${user.age}">2.41</td>
</tr>

stat对象包含以下属性:

  • index,从0开始的角标
  • count,元素的个数,从1开始
  • size,总元素个数
  • current,当前遍历到的元素
  • even/odd,返回是否为奇偶,boolean值
  • first/last,返回是否为第一或最后,boolean值
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Thymeleaf模板引擎 的相关文章

  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • 在 Java 中克隆对象 [3 个问题]

    这样做会调用Asub的clone方法吗 或者Asub深度克隆是否正确 如果没有的话 有没有办法通过这种方法对Asub进行深度克隆呢 abstract class Top extends TopMost protected Object cl
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供

随机推荐

  • 关于VISIO工具栏、菜单栏消失的解决办法

    关于VISIO工具栏 菜单栏消失的解决办法 1 打开注册表编辑器 2 VISIO 2000 HKEY CURRENT USER Software Visio Visio2000 Toolbars 删除上述键值 再启动VISIO 2000就可
  • 查看占用指定端口的程序

    netstat lntup grep 8080
  • 【半监督学习】5、Efficient Teacher

    文章目录 一 背景 二 方法 2 1 Dense Detector 2 2 Pseudo Label Assigner 2 3 Epoch Adaptor 三 效果 论文 Efficient Teacher Semi Supervised
  • brpc组件bvar源码解析(四)Sampler、SamplerCollector和Window类簇

    1 Sampler类 Sampler是所有采样类的基类 采样类中最重要的是take sample函数 采样类的schedule函数调用之后 它的take sample函数将会被一个专门的线程每1秒定时调用 Sampler类的定义 Sampl
  • Redis持久化存储RDB(写时复制)/AOF

    快照 RDB save 会阻塞当前Redis服务器 直到持久化完成 线上应该禁止使用 明确时间点 关机维护 bgsave fork一个子进程 由子进程负责持久化过程 父进程发生写操作修改内存数据时 Copy On Write 才会真正去分配
  • NFS服务详解

    文章目录 一 NFS概述 二 NFS工作原理 2 1NFS工作流程 2 2挂载原理 三 NFS服务部署 3 1常用命令 3 2服务器端配置 3 3客户端配置 3 4服务测试 四 总结 一 NFS概述 1 概述 NFS是一种基于TCP IP
  • 分享菜鸟学Python,从入门到进阶的心得

    来自一位投稿粉丝的学习心得 从最初学Python从爬虫开始 到数据分析 再到GUI的实现 以及后来的机器学习和深度学习文章 我与大家已经走过了好几个月的时间 在这几个月的时间里 我通过文章与大家一同学习 一同进步 向大家展示了如何通过Pyt
  • 第三章 分类模型-随机森林知识点详细总结

    机器学习算法系列 第一章 Python Spark 分类模型 逻辑回归知识点详细总结 第二章 分类模型 决策树知识点详细总结 第三章 分类模型 随机森林知识点详细总结 第四章 分类模型 支持向量机SVM知识点详细总结第五章 关联分析 apr
  • CocosCreator3.8研究笔记(十四)CocosCreator 资源管理Asset Manager

    在游戏的开发过程中 需要使用到大量的图片 音频等资源来 从而带来管理上的困难 Asset Manager 资源管理模块具备加载资源 查找资源 销毁资源 缓存资源 Asset Bundle 等功能 帮助开发者管理其资源的使用 一 资源的加载
  • IHO ENC

    IHO ENC Electronic Navigation Chart is specially specified for marine navigation and defined by IHO International Hydrol
  • CMD批处理实现dot命令自动运行更新

    CMD批处理实现dot命令自动运行更新 前言 一 编写bat脚本 二 解释 总结 前言 最近学习dot语言 我们知道 运行dott脚本大致有两种方法 使用Gvedit编辑dot代码并直接点击运行按钮运行 使用记事本编辑工具编辑号dott脚本
  • 通过adb命令卸载小米手机预设的应用

    文章目录 准备环境 具体步骤 附 准备环境 首先介绍adb命令 ADB是Android Debug brige 是一种用于于安卓设备通信的命令行工具 卸载应用需要用到这个命令 adb命令安装方法 1 adb工具下载 下载适合您的系统的 AD
  • 什么是 I18N 和 L10N ?

    什么是 I18N 和 L10N I18N 是 internationalization 的缩写形式 意即在 i 和 n 之间有 18 个字母 本意是指软件的 国际化 与之类似 L10N 是 localization 的缩写形式 意即在 l
  • 用python写一个hello world、把代码写下来_编程与下厨房:如何教女友写Python(二:不从Hello World开始...

    一 不从 Hello World 开始 但凡是介绍编程语言的入门书籍 都会把 hello world 这个句子的输出作为第一个程序的示例 这种约定俗成的做法就像是新居进火的仪式一般具有非凡的意义 但是在这里 我们并不打算将Python的第一
  • Windows中d3dcompiler_33.dll丢失怎么解决

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或者损坏了 这时你只需下载这个d3dcompiler 33 dll文件进行安装
  • Merkle Tree与区块链

    什么是merkle tree 假设你已经知道了什么是哈希算法以及哈希是用来干啥的 网络传输数据的时候 A收到B的传过来的文件 需要确认收到的文件有没有损坏 如何解决 有一种方法是B在传文件之前先把文件的hash结果给A A收到文件再计算一次
  • 从零开始的ESP8266探索(17)-Client(客户端)功能使用

    文章目录 目的 使用说明 作为TCP Client使用 作为WEB Client使用 总结 目的 前面的文章中有介绍使用Server 服务器 功能 这里的Server和Client指的是基本的TCP的Server和Client 当然就像前面
  • 关于List泛型的强制转换(java list强制类型转换)

    转载只为收藏好文 原文地址 https www cnblogs com hihtml5 p 6194460 html 当我们从数据库中查询出一些数据 有时返回的结果可能是List类型 而我们清楚的知道它的准确类型是List
  • 常用的加密算法

    一 对称加密 所谓的对称加密就是加密跟解密使用同一把密钥 常见的对称加密算法有AES DES等等 下面以DES加密算法为例 Java语言实现DES加密 Java语言实现DES解密 对于不同的对称加密算法 密钥的位数是不同的 对于DES加密算
  • Thymeleaf模板引擎

    1 thymeleaf简介 1 1 什么是thymeleaf Thymeleaf是适用于Web和独立环境的现代服务器端Java模板引擎 能够处理HTML XML JavaScript CSS甚至纯文本 Thymeleaf的主要目标是提供一种