SpringMVC系列九: 数据格式化与验证及国际化

SpringMVC

  • 数据格式化
    • 基本介绍
    • 基本数据类型和字符串自动转换
      • 应用实例-页面演示方式
      • Postman完成测试
    • 特殊数据类型和字符串自动转换
      • 应用实例-页面演示方式
      • Postman完成测试
  • 验证及国际化
    • 概述
    • 应用实例
      • 代码实现
      • 注意事项和使用细节
    • 注解的结合使用
      • 先看一个问题
      • 解决问题
    • 数据类型转换校验核心类-DatBinder
    • 取消某个属性的绑定
      • 应用实例
      • 注意事项和细节说明

数据格式化

基本介绍

说明: 在我们提交数据(比如表单时)SpringMVC怎么对提交的数据进行转换和处理的
1.基本数据类型可以和字符串之间自动完成转换, 比如:
Spring MVC上下文中内建了很多转换器, 可完成大多数Java类型的转换工作.

基本数据类型和字符串自动转换

切换回之前写的springmvc项目
在这里插入图片描述

应用实例-页面演示方式

1.新建com.zzw.web.datavalid.entity包 Monster.java

public class Monster {
    private Integer id;
    private String email;

    private Integer age;
    private String name;

	//有参, 无参构造器, setter, getter, toString方法

2.新建web目录/data_valid.jsp

<head>
    <title>SpringMVC[数据格式/验证等]</title>
</head>
<body>
<h1>SpringMVC[数据格式/验证等]</h1>
<a href="<%=request.getContextPath()%>/addMonsterUI">添加妖怪</a>
<hr>

3.新建web/WEB-INF/pages/datavalid/monster_addUI.jsp

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>添加妖怪</title>
</head>
<body>
<%--这里的表单, 我们使用springMVC的标签来完成
说明几点:
1.SpringMVC 表单标签在显示之前必须在 request 中有一个bean, 该 bean 的属性和表单标签的字段要对应
  request 中的 key 为: form 标签的 modelAttribute 属性值, 比如这里的monster
2.SpringMVC 的 form:form 标签的 action 属性值中的 / 不代表 WEB 应用的根目录
3.这里我们使用springmvc标签的主要目的是方便提示信息回显
--%>
<form:form action="/springmvc/" method="post" modelAttribute="?">
    妖怪名字: <form:input path="name"/><br/><br/>
    妖怪年龄: <form:input path="age"/><br/><br/>
    妖怪邮件: <form:input path="email"/><br/><br/>
    <input type="submit" value="添加妖怪"/>
</form:form>
</body>
</html>

4.新建com.zzw.web.datavalid包 MonsterHandler.java

/**
 * @author 赵志伟
 * @version 1.0
 * MonsterHandler 处理器响应用户提交数据
 * @Scope(value = "prototype") 表示每次请求MonsterHandler会生成一个新的对象
 */
@SuppressWarnings({"all"})
@Controller
@Scope(value = "prototype")
public class MonsterHandler {

    /**
     * 显示添加monster的页面
     * 1. 这里Map<String, Object> map
     * 2. 当我们向map添加数据时, 会默认存放到request域中
     * @param map
     * @return
     */
    @RequestMapping(value = "/addMonsterUI")
    public String addMonsterUI(Map<String, Object> map) {
        /**
         * 解读
         * 1.这里的表单, 我们使用springMVC的标签来完成
         * 2.SpringMVC 表单标签在显示之前必须在 request 中有一个bean, 该 bean 的属性和表单标签的字段要对应
         *   request 中的 key 为: form 标签的 modelAttribute 属性值, 比如这里的monster
         * 3.SpringMVC 的 form:form 标签的 action 属性值中的 / 不代表 WEB 引用的根目录
         * 4.<form:form action="?" method="post" modelAttribute="monster">
         *   这里需要给request增加一个 monster, 因为jsp 页面 的modelAttribute="monster"需要
         *   这时是springMVC的内部检测机制 即使是一个空的也需要, 否则报错
         */
        //再次说明, 如果你跳转的页面, 使用了springmvc标签
        //就需要准备一个对象放入到request域中, 这个对象的属性名 monster, 对应
        //springmvc表单标签的 modelAttribute="monster"
        map.put("monster", new Monster());
        return "datavalid/monster_addUI" ;
    }
}

5.monster_addUI.jsp补充 modelAttribute

 modelAttribute="monster"

6.新建web/WEB-INF/pages/datavalid/success.jsp

<h1>恭喜, 添加成功~</h1>

7.MonsterHandler 新增save方法

/**
 * 编写方法, 处理添加妖怪
 * 1. springmvc可以将提交的数据, 按照参数名和对象的属性名匹配
 * 2. 直接封装到对象中->前面讲解模型数据时讲过
 * String -> Integer
 * @param monster
 * @return
 */
@RequestMapping(value = "/save")
public String save(Monster monster) {
    System.out.println("---monster---" + monster);
    return "datavalid/success";
}

8.monster_addUI.jsp补充 action

<form:form action="save" method="post" modelAttribute="monster">

在这里插入图片描述

9.测试. 浏览器: http://localhost:8080/springmvc/data_valid.jsp
1)如果age输入的是 数字, 则通过, 说明SpringMVC可以将提交的字符串 数字, 比如"28", 转成 Integer/int
2)如果不是数字, 则给出400的页面

Postman完成测试

10.Postman测试
在这里插入图片描述

特殊数据类型和字符串自动转换

应用实例-页面演示方式

1.特殊数据类型和字符串之间的转换使用注解(比如日期, 规定格式的小数比如货币形式等)
2.对于日期和货币可以使用 @DataTimeFormat@NumberFormat 注解, 把这两个注解标记在字段上即可


3.修改 Monster.java, 增加 birthdaysalary 字段

@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;
@NumberFormat(pattern = "###,###.##")
private Float salary;

//全参构造器, setter,getter,toString方法

4.修改monster_addUI.jsp, 增加 birthdaysalary 字段

妖怪生日: <form:input path="birthday"/>要求以"9999-11-11"的形式<br/><br/>
妖怪薪水: <form:input path="salary"/>要求以"123,890.12"的形式<br/><br/>

5.测试
1)如果 birthdaysalary 是按照指定格式输入, 则通过, 说明SpringMVC可以按注解指定格式转换
2)如果没有按照注解指定格式, 则给出400的页面

在这里插入图片描述
妖怪薪水只要能转成数字就行, 例如123456.12, 456.12, 0.123456, 但是12x.11就不行.

妖怪生日格式如2000-10-15就可以, 但是200010-15就不可以.

Postman完成测试

在这里插入图片描述

验证及国际化

概述

1.对输入的数据(比如表单数据), 进行必要的验证, 并给出相应的提示信息.
2.对于验证表单数据, springMVC提供了很多使用的注解, 这些注解由JSR 303 验证框架提供.

JSR 303 验证框架
1.JSR 303JavaBean 数据合法性校验提供的标准框架, 它已经包含在 JavaEE 中.
2.JSR 303 通过在 Bean 属性上标注类似于 @NoNull, @Max 等标准的注解指定校验规则, 并通过标准的验证接口对 Bean 进行验证.
3.JSR 303 提供的基本验证注解有
在这里插入图片描述


Hibernate Validator 扩展注解
1.Hibernate ValidatorHibernate没有关系, 只是 JSR 303 实现的一个扩展.
2. Hibernate ValidatorJSR 303 的一个参考实现, 除支持所有标准的校验注解外, 它还支持以下的扩展注解:
3.扩展注解如下
在这里插入图片描述

应用实例

代码实现

1.引入验证和国际化相关的jar包 springmvc验证需要的jar包

2.修改Monster.java

//@Range(min = 1, max = 100)
//表示接受的age值, 在 1-100 之间
@Range(min = 1, max = 100)
private Integer age;

//@NotEmpty 表示name不能为空
//Asserts that the annotated string, collection, map or array is not {@code null} or empty.
@NotEmpty
private String name;

3.修改MonsterHandler.java

/**
 * 编写方法, 处理添加妖怪
 * 1. springmvc可以将提交的数据, 按照参数名和对象的属性名匹配
 * 2. 直接封装到对象中->前面讲解模型数据时讲过
 * String -> Integer
 * 3. @Valid Monster monster: 表示对monster接收的数据进行校验
 * 4. Errors errors 表示如果校验出现错误, 将校验的错误信息保存到errors中
 * 5. Map<String, Object> map 表示如果校验出现错误, 将校验的错误信息保存到 map 通过保存monster对象
 * 6. 校验发生的时机: 在springmvc底层, 反射调用目标方法时, 会接收到http请求的数据, 然后根据注解来进行验证
 *    , 在验证过程中, 如果出现了错误, 就把错误信息填充到errors 和 map
 * @param monster
 * @return
 */
@RequestMapping(value = "/save")
public String save(@Valid Monster monster, Errors errors, Map<String, Object> map) {
    System.out.println("---monster---" + monster);
    //我们为了看到验证的情况, 我们输出map 和 errors
    System.out.println("=== map ===");
    for(Map.Entry<String, Object> entry : map.entrySet()) {
        System.out.println("key=" + entry.getKey() + " value=" + entry.getValue());
    }
    System.out.println("=== errors ===");
    List<ObjectError> allErrors = errors.getAllErrors();
    for (ObjectError error : allErrors) {
        System.out.println("error=" + error);
        //返回添加页面
        return "datavalid/monster_addUI";
    }
    return "datavalid/success";
}

4.测试
在这里插入图片描述
在这里插入图片描述

error只输出了一条信息, 改进

System.out.println("=== errors ===");
if (errors.hasErrors()) {//判断是否有错误
    List<ObjectError> allErrors = errors.getAllErrors();
    for (ObjectError error : allErrors) {
        System.out.println("error=" + error);
    }
    //返回添加页面
    return "datavalid/monster_addUI";
}
return "datavalid/success";

再次测试
在这里插入图片描述

5.配置国际化文件 springDispatcherServlet-servlet.xml

<!--配置国际化错误信息的资源处理bean-->
<bean id="messageSource" class=
        "org.springframework.context.support.ResourceBundleMessageSource">
    <!--配置国际化文件名字
        如果这样配的话, 表示messageSource会到 src/i18nXXX.properties去读取错误信息
    -->
    <property name="basename" value="i18n"></property>
</bean>

6.创建国际化文件 src/i18n.properties 在线Unicode转中文

NotEmpty.monster.name=\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a #用户名不能为空
#如果类型匹配错误, 自定义错误信息 => (类型匹配错误, 年龄需要在0150之间)
typeMismatch.monster.age=\u7c7b\u578b\u5339\u914d\u9519\u8bef, \u5e74\u9f84\u9700\u8981\u57280\u548c150\u4e4b\u95f4 #类型匹配错误, 年龄需要在0150之间
#如果范围错误, 自定义错误信息 => (这是新的验证错误信息, 年龄必须在1-100之间)
Range.monster.age=\u8fd9\u662f\u65b0\u7684\u9a8c\u8bc1\u9519\u8bef\u4fe1\u606f, \u5e74\u9f84\u5fc5\u987b\u57281-100\u4e4b\u95f4 #这是新的验证错误信息, 年龄必须在1-100之间
typeMismatch.monster.birthday=\u751f\u65e5\u683c\u5f0f\u4e0d\u6b63\u786e #生日格式不正确
typeMismatch.monster.salary=\u85aa\u6c34\u683c\u5f0f\u4e0d\u6b63\u786e #薪水格式不正确

7.修改monster_addUI.jsp, 回显错误信息

<form:form action="save" method="POST" modelAttribute="monster">
    妖怪名字: <form:input path="name"/><form:errors path="name"/><br/><br/>
    妖怪年龄: <form:input path="age"/><form:errors path="age"/><br/><br/>
    妖怪邮件: <form:input path="email"/><form:errors path="email"/><br/><br/>
    妖怪生日: <form:input path="birthday"/><form:errors path="birthday"/>要求以"9999-11-11"的形式<br/><br/>
    妖怪薪水: <form:input path="salary"/><form:errors path="salary"/>要求以"123,890.12"的形式<br/><br/>
    <input type="submit" value="添加妖怪"/>
</form:form>

8.测试
在这里插入图片描述在这里插入图片描述

如果不配置国际化文件, 默认的错误信息如下
在这里插入图片描述

注意事项和使用细节

1.在需要验证的 JavaBean/POJO 的字段上加上相应的验证注解.
2.目标方法上, 在 JavaBean/POJO 类型的参数前, 添加 @Valid 注解, 告知 SpringMVCbean 是需要验证的
在这里插入图片描述

3.在 @valid 注解之后, 添加一个 ErrorsBindingResult 类型的参数, 可以获取到验证的错误信息

4.需要使用 <form:errors path=“email”></form:errors> 标签来显示错误信息, 这个标签, 需要写在 <form:form> 标签内生效.
5.错误消息的国际化文件i18n.properties, 中文需要是Unicode编码, 使用工具转换
√ 格式: 验证规则. 表单modelAttribute值.属性名=消息信息
NotEmpty.monster.name=\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a
Range.monster.age=\u5e74\u9f84\u9700\u8981\u57280\u548c100\u4e4b\u95f4
5.注解 @NotNull@NotEmpty 的区别说明
1) 查看源码可以知道: @NotEmpty Asserts that the annotated string, collection, map or array is not {@code null} or empty.
2) 查看源码可以知道: @NotNull The annotated element must not be null. Accepts any type.

种类修饰类型作用
@NotEmptyString, collection, mapnull || size=0
@NotNull任意类型null

3) 解读: 如果是字符串验证空, 建议使用 @NotEmpty

6.SpringMVC验证时, 会根据不同的验证错误, 返回对应的信息

注解的结合使用

先看一个问题

●问题提出, age没有, 是空的, 提交确实成功了

在这里插入图片描述在这里插入图片描述

解决问题

1.使用 @NotNull + @Range 组合使用解决

2.具体代码

//email是string, 使用@NotEmpty
@NotEmpty
private String email;

@NotNull(message = "age不能为空")
@Range(min = 1, max = 100)//Range也有默认的message提示信息
private Integer age;

@NotEmpty//NotEmpty有默认的message提示信息
private String name;

@NotNull(message = "生日不能为空")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;

@NotNull(message = "薪水不能为空")
@NumberFormat(pattern = "###,###.##")
private Float salary;
  1. 测试(页面方式),这时 age 不能为空,同时必须是 1-100, (也不能输入 haha, hello 等不
    能转成数字的内容

数据类型转换校验核心类-DatBinder

DataBinder工作机制-了解
图例Spring MVC 通过 反射机制对目标方法进行解析, 将请求消息绑定到处理方法的入参中. 数据绑定的核心部件是 DataBinder, 运行机制如下

1.ConversionService数据类型转换/格式化 遇到的错误, 会放入到BindingResult中
2.Validator校验器遇到的错误, 会放入到BindingResult中
在这里插入图片描述

Error的运行类型是BeanPropertyBindingResult, BeanPropertyBindingResult实现了BindingResult接口
在这里插入图片描述

在这里插入图片描述
Debug一下DataBinder类的validate如何得到验证errors信息
在这里插入图片描述

取消某个属性的绑定

应用实例

●说明
在默认情况下, 表单提交的数据都会和pojo类型的javabean属性绑定, 如果程序员在开发中, 希望取消某个属性的绑定, 也就是说, 不希望接收到某个表单对应的属性的值, 则可以通过 @InitBinder注解取消绑定

1.编写一个方法, 使用InitBinder标识的该方法, 可以对WebDataBinder对象进行初始化. WebDataBinderDataBinder的子类, 用于完成由表单字段到JavaBean属性的绑定.
2.@InitBinder方法不能有返回值, 它必须声明为void
3.@InitBinder方法的参数通常是WebDataBinder

●案例-不希望接收怪物的名字属性
1.修改MonsterHandler.java, 增加方法

//取消绑定 monster的name表单提交的值给monster.name属性
    @InitBinder
    public void initBinder(WebDataBinder webDataBinder) {
        /**
         * 解读
         * 1.方法上需要标注 @InitBinder springmvc底层会初始化 WebDataBinder
         * 2.调用webDataBinder.setDisallowedFields("name") 表示取消指定属性的绑定
         *   即: 当表单提交字段为 name时, 就不再把接收到的name值, 填充到model数据[monster的name属性]
         * 3.机制: springmvc 在底层通过反射调用目标方法时, 接收到http请求的参数和值, 使用反射+注解技术
         *   取消对指定属性的填充
         * 4.setDisallowedFields支持可变参数, 可以填写多个字段
         * 5.如果我们取消某个属性绑定, 验证就没有意义了, 应当把验证的注解去掉
         *   //@NotEmpty
         *   private String name;
         */
        webDataBinder.setDisallowedFields("name");
    }

2.完成测试(页面测试)

3.完成 Postman 测试

注意事项和细节说明

1.setDisallowedFields()是可变形参, 可以指定多个字段
2.当将一个字段/属性, 设置为
disallowed
, 就不再接收表单提交的值, 那么这个字段/属性的值, 就是该对象默认的值(具体看程序员定义时指定)
3.一般来说, 如果不接受表单字段提交数据, 则该对象字段的验证也就没有意义了, 可以注销掉, 比如 注销 //@NotEmpty

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/719794.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据中心分类和类别综合指南

数据中心可根据其规模、功能、所有权、层级和部署方法进行分类。以下是一些典型的数据中心类别和分类。 数据中心的分类和分级 根据尺寸 1. 小型数据中心&#xff1a;通常是为了满足对IT基础设施需求较少的组织或小型企业的需求而创建的。与大型数据中心相比&#xff0c;小型…

【Java学习笔记】枚举类与泛型

枚举类型是一种特殊的数据类型&#xff0c;之所以特殊&#xff0c;是因为它既是一种类(Class)类型&#xff0c;却又比类类型多了一些特殊的约束&#xff0c;但正是因为这些约束的存在&#xff0c;也造就了枚举类型的简洁性、安全性、便捷性。 泛型&#xff0c;即“参数化类型”…

【SPIE独立出版 | 往届均已完成EI检索】2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024)

2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024) 2024 International conference on Cloud Computing, Performance Computing and Deep Learning *CCPCDL往届均已完成EI检索&#xff0c;最快会后4个半月完成&#xff01; 一、重要信息 大会官网&#xff1a;www…

python-开学?

[题目描述] 小执&#xff1a;终于可以开学啦&#xff01;好开心啊&#xff01; 小理&#xff1a;你没看新闻吗&#xff0c;开学日期又延后了。 小执&#xff1a;&#x1d441;&#x1d442;&#x1d442;&#x1d442;&#x1d442;&#x1d442;&#x1d442;&#x1d442;&am…

Vue01-前端概述

一、前端核心分析 1.1、概述 Soc原则&#xff1a;关注点分离原则 Vue 的核心库只关注视图层&#xff0c;方便与第三方库或既有项目整合。 HTML CSS JS : 视图 &#xff1a; 给用户看&#xff0c;刷新后台给的数据 网络通信 &#xff1a; axios 页面跳转 &#xff1a; v…

Java聚合快递系统对接云洋系统快递小程序APP公众号系统源码

快递小程序的深度解析与未来展望 &#x1f69a; 引言&#xff1a;快递行业的变革与挑战 在数字化浪潮的推动下&#xff0c;快递行业正经历着前所未有的变革。随着电商的蓬勃发展&#xff0c;快递业务量呈爆发式增长&#xff0c;而传统的快递管理方式已难以满足日益增长的需求。…

我用chatgpt写了一款程序

众所周知&#xff0c;Chatgpt能够帮助人们写代码&#xff0c;前几天苏音试着完全用Chatgpt写一款Python程序 有一句话我很赞同&#xff0c;未来能代替人的不是AI&#xff0c;是会使用AI的人。 最终&#xff0c;写下来效果还不错&#xff0c;完全提升了我的办公效率。 开发前…

计算机跨考现状,两极分化现象很严重

其实我觉得跨考计算机对于一些本科学过高数的同学来说有天然的优势 只要高数能学会&#xff0c;那计算机那几本专业课&#xff0c;也能很轻松的拿下&#xff0c;而对于本科是文科类的专业&#xff0c;如果想跨考计算机&#xff0c;难度就不是一般的大了。 现在跨考计算机呈现…

了解Java的LinkedBlockingQueue

了解Java的LinkedBlockingQueue LinkedBlockingQueue是一个基于链接节点的有界阻塞队列。它实现了BlockingQueue接口&#xff0c;可以在多线程环境中安全地进行插入、移除和检查操作。LinkedBlockingQueue的容量可以在创建时指定&#xff0c;如果未指定&#xff0c;则默认容量…

AI绘画stable diffusion 模型介绍及下载、使用方法,超全的新手入门教程建议收藏!

大家好&#xff0c;我是画画的小强 今天我将继续分享AI绘画Stable Diffusion的模型、参数含义等&#xff0c;分享给各位朋友一起学习。 一、模型 Stable difusion 模型就是所谓的大模型&#xff0c;用来控制整个画面的风格走势的。 打开webui页面&#xff0c;可以看到大模型…

安卓实现圆形按钮轮廓以及解决无法更改按钮颜色的问题

1.实现按钮轮廓 在drawable文件新建xml文件 <shape xmlns:android"http://schemas.android.com/apk/res/android"<!--实现圆形-->android:shape"oval"><!--指定内部的填充色--><solid android:color"#FFFFFF"/><!-…

Mongodb介绍及window环境安装

本文主要内容为nosql数据库-MongoDB介绍及window环境安装。 目录 什么是MongoDB&#xff1f; 主要特点 MongoDB 与Mysql对应 安装MongoDB 下载MongoDB 自定义安装 创建目录 配置环境变量 配置MongoDB服务 服务改为手动 启动与关闭 安装MongoDB Shell 下载安装包 …

高考分数限制下,选好专业还是选好学校?

高考分数限制下&#xff0c;选好专业还是选好学校&#xff1f; 高考作为每年一度的盛大考试&#xff0c;不仅关乎学生们的未来&#xff0c;更承载了家庭的期望。2004年高考刚刚结束&#xff0c;许多考生和家长已经开始为填报志愿而焦虑。选好学校和专业&#xff0c;直接关系到…

LogicFlow 学习笔记——8. LogicFlow 基础 事件 Event

事件 Event 当我们使用鼠标或其他方式与画布交互时&#xff0c;会触发对应的事件。通过监听这些事件&#xff0c;可以获取其在触发时所产生的数据&#xff0c;根据这些数据来实现需要的功能。详细可监听事件见事件API。 监听事件 lf实例上提供on方法支持监听事件。 lf.on(&…

【SCAU数据挖掘】数据挖掘期末总复习题库应用题及解析

1. 给定圆的半径为e &#xff0c;令 MinPts3&#xff0c;考虑下面两幅图。 &#xff08;1&#xff09;哪些对象是核心对象? m,p,o,r(因为这些核心对象在半径e的范围内都至少包含MinPts3个对象) &#xff08;2&#xff09;哪些对象是直接密度可达的? 对象q是…

2024年【通信安全员ABC证】最新解析及通信安全员ABC证模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 通信安全员ABC证最新解析是安全生产模拟考试一点通总题库中生成的一套通信安全员ABC证模拟试题&#xff0c;安全生产模拟考试一点通上通信安全员ABC证作业手机同步练习。2024年【通信安全员ABC证】最新解析及通信安全…

vuejs3 pinia持久化存储

pinia地址&#xff1a; 开始 | Pinia 插件地址&#xff1a; 快速开始 | pinia-plugin-persistedstate 先安装pinia npm install pinia 再安装插件 安装pinia后&#xff0c;再安装这个插件 npm i pinia-plugin-persistedstate 全局中引入持久化插件 在src目录下的main…

【ONE·基础算法 || 记忆化搜索】

总言 主要内容&#xff1a;编程题举例&#xff0c;熟悉理解记忆化搜索类题型&#xff08;对比递归、动态规划理解运用&#xff09;。             文章目录 总言1、记忆化搜索1.1、基本介绍1.2、细节理解&#xff08;记忆搜索化、递归、动态规划……&#xff09; 2、斐…

智源联合多所高校推出首个多任务长视频评测基准MLVU

当前&#xff0c;研究社区亟需全面可靠的长视频理解评估基准&#xff0c;以解决现有视频理解评测基准在视频长度不足、类型和任务单一等方面的局限性。因此&#xff0c;智源联合北邮、北大和浙大等多所高校提出首个多任务长视频理解评测基准MLVU&#xff08;A Comprehensive Be…

利用K8S技术栈打造个人私有云

1.三个节点&#xff1a;master&#xff0c;slave&#xff0c;client 在Kubernetes集群中&#xff0c;三个节点的职责分别如下&#xff1a; Master节点&#xff1a; docker&#xff1a;用于运行Docker容器。 etcd&#xff1a;一个分布式键值存储系统&#xff0c;用于保存Kuberne…