Spring MVC【一篇搞定】

news2024/10/2 16:27:51

Spring MVC

文章目录

  • Spring MVC
    • 一、什么是 Spring MVC
    • 二、介绍MVC
      • 2.1、Spring MVC 和 MVC 之间的关系
    • 三、创建 Spring MVC
    • 四、掌握 Spring MVC 的核心 ☆☆☆☆
      • 4.1、Spring 热部署
      • 4.2、实现用户与程序的连接 ☆
        • 4.2.1、@RequestMapping
        • 4.2.2、@GetMapping/@PostMapping
      • 4.3、获取参数 ☆
        • 4.3.1、传递单个参数
        • 4.3.2、传递对象
        • 4.3.3、表单传递参数
        • 4.3.4、后端映射前端参数
        • 4.3.5、@RequestParam (参数不为 nul)
        • 4.3.6、非必传参数
        • 4.3.7、获取一个 Json 对象
        • 4.3.8、获取 URL 中的参数
        • 4.3.9、获取上传的文件
        • 4.3.10、获取Cookie/Session/ header
        • 4.3.11、获取Cookie
        • 4.3.12、获取header
        • 4.3.13、获取Session
      • 4.4、输入数据
        • 4.4.1、返回Json对象
      • 4.5、转发与重定向

一、什么是 Spring MVC

官方文档的描述:

​ Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它 的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为“Spring MVC” 。

从官方描述总结:

1、Spring MVC 是一个 Web 框架

2、Spring MVC 是基于 Servlet API 构建的

对于 Spring 里面的 web 中 必须掌握的框架之一。

二、介绍MVC

​ MVC 时候 Model View Controller 的缩写,是软件工程中的一种软件架构模式,分为了 Model(模型),View(视图),Controller(控制器)三个基本部分。

  • Model:是应用程序中用于处理应用程序数据逻辑的部分;通常模型对象负责在数据库中存取数据。
  • View:应用程序中处理数据显示的部分;通常视图是依据模型数据创建的
  • Controller:应用程序中处理用户交互的部分;(类似于安检人员)

以下图是流程图:

在这里插入图片描述

2.1、Spring MVC 和 MVC 之间的关系

​ 他两之间的关系就类似于 IoC与DI 的关系;MVC 是一种思想,而 Spring MVC 是对 MVC 思想的具体实现,是一个框架产品。

IoC 描述的是目标,DI描述的是具体可实现的思路。

总的来说:Spring MVC 是一个实现了 MVC 模式,并继承了 Servlet API 的 Web 框架。

尽然是 web 框架,那么当用户输入 url 后,那么 Spring MVC 项目是可以感知到用户的请求的。

三、创建 Spring MVC

​ 创建 Spring MVC 是基于 Spring Boot 的所以前面创建的步骤与 Spring Boot 是一样的,直到下图,现在依赖的环节有所不同

在这里插入图片描述

这里需要 选择 Web 里面的 Spring Web 然后在里面的描述就可以看到有 Spring MVC 了。

点击 next之后,就把需要等待一下,等idea加载完成再把目录里面多余的文件给删除了;以及一些目录文件说明,项目的可以看之前 Spring Boot 创建的那篇文章。

在这里插入图片描述

四、掌握 Spring MVC 的核心 ☆☆☆☆

学习 Spring MVC 只需要掌握 3 个功能:

1、连接的功能: 将用户(浏览器)与java程序连接起来,简单来说就是访问一个 url 地址可以调用我们 Spring 程序。

2、获取参数的功能: 用户访问的时候会带一些参数,在程序中要想办法获取到参数。

3、输出数据的功能: 执行了业务逻辑过后,需要把执行的结果返回给用户。

这三个功能是 Spring MVC 的核心,也就是说掌握了这三个功能也就掌握了 Spirng MVC,接下来都是关于这三个功能的详细分析及使用。

4.1、Spring 热部署

​ 现在这里设置也下 Spring 的热部署,热部署就是 idea 会自动的更新部署最新的代码,不会让你每一次代码就重新启动一下 Spring MVC 程序,不然这样太麻烦了,使用热部署自动更新部署代码,不需要再次重启程序也能进行url访问。

但是在新加载类的时候可能是不成功的,等待了5秒左右,不成功的话可以重新启动一下。对于文件的变化可能热部署效果不是很好,但是对于修改代码是没有问题的

1、首先要添加依赖,dev-tool 框架支持

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
</dependency>

2、开启 idea 中当前项目的自动编译

在这里插入图片描述

3、开启运行时热部署

在这里插入图片描述

我的 idea 版本是比较老的,如果你当前的 idea 版本比较高,或者说是没有找到 …app.runinng 这个选项,可以执行一下操作:

在这里插入图片描述

最后使用 debug 来启动项目,而非 run 方法启动(不然无效)

4.2、实现用户与程序的连接 ☆

以下的代码,都是在 Spring Boot 里面用到过,相对来说好理解。

@Controller
@ResponseBody // 返回一个非静态页面的数据
@RequestMapping("/user") // 路由地址
public class UserController {
    
    @RequestMapping("/hi") //localhost:8080/user/hi
    public String hi() {
        return "Hello ,Spring MVC!!!";
    }
}

启动Spring MVC 程序,输入 url 地址就可以访问浏览器页面了。

4.2.1、@RequestMapping

这段代码主要注意的地方就是 @RequestMapping 注解 ,他既可以修饰类也可以修饰方法,默认是既支持 GET 请求,也支持post 请求。

image-20230809114111963

但是 @RequestMapping 注解 也是可以设置 请求类型的 ;

@RequestMapping(value = "/user" , method = RequestMethod.POST) // 路由地址

参数 value 默认的,只有路由的时候可以不用填,后面 method 参数 就是用来设置请求类型的,可以在 idea 里面打开查看源码支持那些请求参数。

这时候设置的是 Post 请求,当使用 Get 请求的时候,就会报错提示 401 Method Not Allowed

4.2.2、@GetMapping/@PostMapping

​ 这两个注解其实跟在 @RequestMapping 这个注解里面的参数设置 method 效果是一样的,看自己习惯用那种方法。

@Controller
@ResponseBody // 返回一个非静态页面的数据
@RequestMapping("/user") // 路由地址
public class UserController {
    
    @PostMapping("/hi2") // http://localhost:8080/user/hi2
    public String hi2() {
        return "Hello ,Spring MVC2!!!";
    }
}

这段代码也就是说,仅支持 Post 请求,强行使用 Get 请求就会提示 405.@GetMapping用法也是一样的道理不再赘述。

4.3、获取参数 ☆

4.3.1、传递单个参数

​ 代码里面的形参要与前端传递的形参保持一致

@Controller
@ResponseBody // 返回一个非静态页面的数据
@RequestMapping(value = "/user" ) // 路由地址  method = RequestMethod.POST
public class UserController {

    @RequestMapping("/hi4") //localhost:8080/user/hi4
    public String hi4(String name) {
        return "Hello "+name;
    }
}

url:

http://localhost:8080/user/hi4?name=python

代码要与前端传递的参数 name 保持一致,最后的打印结果就是 python ;如果什么也没有输入那么返回的就是一个null。

4.3.2、传递对象

​ 首先得有一个对象:

import lombok.Data;
@Data // 复合注解,基于lombok依赖,里面包含了 @Getter + @Setter + @ToString
public class User {
    private int id;
    private String name;
    private String password;
    private int age;
}

得到对象:

@Controller
@ResponseBody // 返回一个非静态页面的数据
@RequestMapping(value = "/user" ) // 路由地址  method = RequestMethod.POST
public class UserController {
    @RequestMapping("/add") // localhost:8080/user/add
    public String add(User user) { // 这里就是拿到了这个对象
        return user.toString();
    }
}

url:

http://localhost:8080/user/add?id=1&name=java&password=123&age=18

结果:

User(id=1, name=java, password=123, age=18)

如果 url 里面的参数名称与后端代码参数名称对应不上,那么对象里面不对应的属性就是 null

4.3.3、表单传递参数

这个主要可以用 Postman 来传递,直接输入就可以了

image-20230809150331689

4.3.4、后端映射前端参数

​ 毕竟前后端是分离的,那么代码也不是同一个人写的,有时候是交接工作的时候新来的人把老人的 参数名称改了,比如说 password 新人改成了 pwd,这样后端就与前端不一致了,就接收不到前端参数了,为了解决这个问题想到的有两个方法。

1、把后端的 password 改成 pwd ,这种方法是不可以的,当项目工程大的时候,名称一改动就会牵连别的后端代码地方,越改越出错,所以这种方法不可取 ❌❌❌❌❌❌❌❌❌❌❌❌❌❌❌❌❌

2、使用 @RequestParam 注解来映射前后端参数值

@Controller
@ResponseBody 
@RequestMapping(value = "/user" ) 
public class UserController {

    @RequestMapping("/login") //localhost:8080/user/login
    public String login(String name ,@RequestParam("pwd") String password) {
        return "name= " + name+ "| password=" +password;
    }
}

将前端的 pwd 参数映射到后端的 password 变量中

url:

http://localhost:8080/user/login?name=java&pwd=987

结果:name= java| password=987

加上 @RequestParam 注解 就算前端 传过来的是 pwd ,后端的参数也能很好的映射前端。

4.3.5、@RequestParam (参数不为 nul)

由上面可知,第一个作用可以重命名实现前后端映射;第二个作用就是 参数不能为 null;例子:进行登入操作的时候是必须输入 账户和密码 的,为了防止为 null ,可以在那个参数前面加上 @RequestParam 注解;

@Controller
@ResponseBody 
@RequestMapping(value = "/user" ) 
public class UserController {
    @RequestMapping("/login2") //localhost:8080/user/login2
    public String login2(@RequestParam String name ,@RequestParam String password) {
        return "name= " + name+ "| password=" +password;
    }
}

url:

localhost:8080/user/login2?name=java

报错:

{

“timestamp”: “2023-08-09T07:28:59.552+00:00”,

“status”: 400,

“error”: “Bad Request”,

}

提示的是请求失败,所以加上 @RequestParam 注解之后,他们的参数都不能为 null

4.3.6、非必传参数

@RequestParam 第三个作用就是在设置前后端参数的映射后,是非必传的参数。在注解 @RequestParam 的源码中 有一段代码是 boolean required() default true; 这段代码的意思就是必传的意思,你把他参数改成false就非必传了。

@Controller
@ResponseBody 
@RequestMapping(value = "/user" ) 
public class UserController {

    @RequestMapping("/login3") //localhost:8080/user/login2
    public String login3(@RequestParam String name ,@RequestParam(value = "pwd",required = false) String password) {
        return "name= " + name+ "| password=" +password;
    }
}

url:

localhost:8080/user/login3?name=java

结果:

name= java| password=null

程序员通过设置 required = false 来设置成 非必传参数。


@RequestParam 作用总结:

1、前后端参数映射;

2、设置必传参数;

3、前后端参数映射+非必传参数 required = false


4.3.7、获取一个 Json 对象

​ 获取前端的 Json 对象需要一个注解 @RequestBody 这个注解就让后端知道前端传递的是一个 Json 格式的数据。

如果不加注解的话,后端接收不到会响应一个 null

@Controller
@ResponseBody 
@RequestMapping(value = "/user" ) 
public class UserController {

    @RequestMapping("/loginByJson") // localhost:8080/user/loginByJson
    public String loginByJson(@RequestBody User user){ // Json 是对象要用对象来接受形参
        return "name= " + user.getName()+ "| password=" +user.getPassword();
    }
}

Json:

{"name":"java","password":"123"}

结果:

name= java| password=123

获取前端 Json 格式的数据必须加注解 @RequestBody ,她表示提示后端从前端获取一个Json格式的数据。

4.3.8、获取 URL 中的参数

一般情况下的 url 地址:http://localhost:8080/login?name…

但是有些 url 的地址:http://localhost:8080/{name}/{password}…

​ 有些公司为了在搜索引擎上面搜索排名更高就采用关键字的方式,一般的url地址后面更的都是参数,但是有些 url :http://localhost:8080/java/如何学好java?/123/… 这样的url就会出现关键字,在搜索引擎上面排位高一点。

​ 那么从 url 的 path 中获取参数需要用到 @PathVariable 注解,代码实现:

@Controller
@ResponseBody 
@RequestMapping(value = "/user" ) 
public class UserController {
    @RequestMapping("/loginByPath/{name}/{passwrod}") 
    public String loginByPath( @PathVariable String name,
                               @PathVariable("passwrod") String pwd) {
        return "name= " + name+ "| password=" +pwd;
    }
}

url:

http://localhost:8080/user/loginByPath/java/234

结果:

name= java| password=234


总结 @PathVariable 有两个作用:

1、获取url里面的参数

2、与注解 @RequestParam 有前后端映射的功能,与前端url里面的{password}对应


4.3.9、获取上传的文件

​ 当前端传递一张图片或者一份文件的时候,Spring 里面有的一个注解 @RequestPart 就是接收文件,再把文件放入指定的目录中。

@Controller
@ResponseBody 
@RequestMapping(value = "/user" ) 
public class UserController {

    @RequestMapping("/upFile") // localhost:8080/user/upFile
    public String upFile(Integer id, @RequestPart("photo")MultipartFile file) throws IOException {
        //业务处理....
        file.transferTo(new File("E:\\a.png"));
        return "id:"+id+" 图片上传成功!";
    }
}

注解 @RequestPart 里面的 ”photo” 是与前端参数对应起来的,这里先用 postman 来模拟一下前端

image-20230810095128576

但是这段代码是有问题的,当需要批量传输图片的时候,传递到E盘会直接覆盖a.png,不会生成新的文件,所以代码是需要改进的,让每一个文件生成唯一的id,这样就不会被覆盖吞噬掉了。

@Controller
@ResponseBody 
@RequestMapping(value = "/user" ) 
public class UserController {

    @RequestMapping("/upFile") // localhost:8080/user/upFile
    public String upFile(Integer id, @RequestPart("photo")MultipartFile file) throws IOException {
        //业务处理....
        // 1、生成唯一的id
        String fileName = UUID.randomUUID().toString(); // UUID是唯一id:时间轴+网卡号+随机数....
        // 2、获取上传文件名的后缀
        String fileType = file.getOriginalFilename().substring(
                file.getOriginalFilename().lastIndexOf(".") 
        ); // 获取后缀名
        fileName += fileType; // 组成完整的文件名
        file.transferTo(new File("E:\\"+fileName));
        return "id:"+id+" 图片上传成功!";
    }

image-20230810100350375

在 java 程序中使用 UUID 的方式生成唯一id,然后再截取文件的后缀名,将唯一id和后缀名叠加起来就组成了完整新图片传入指定的目录中;但是指定的目录最好配置到配置文件汇总,方便最后维修的时候不懂代码,改配置文件就行。

4.3.10、获取Cookie/Session/ header

​ 为什么会有 Cookie和Session尼?因为在 http协议或者说是 https 的协议他们的特性是无连接(无长连接,只是响应一次),无状态(后一次发送的请求以前一次无关系)的,就比如说是登录一个网站需要输入账号密码,那么由于http协议的特性当你每次访问一次这个网站里面的信息都会输入账号和密码,这是非常麻烦用户体验感极差的东西,为了解决这种问题,就出现了Cookie和session;

Cookie:用户刚开始使用账号和密码登录某个网站的时候,浏览器会把登录成功的信息存入 Cookie 里面以便访问这个网站的其他页面的时候已经验证你的信息无需再次进行登录操作;但是 Cookie 有个缺点,就是Cookie 的信息是存在客服端的,存在客户端就会考虑到安全的问题,用户可以模拟Cookie,在Cookie 里面写入一些自己的东西,为了解决安全的问题也就出现了 Session。

Session:为了解决 Cookie 带来的问题,那么 Session 是把用户的信息放在了服务器里面,Session 也是键值对存在了服务器里面,并且 Session 的 id值是动态变化的,利用 Cookie 机制把 Session 的 id 存入到Cookie里面,浏览器拿到 Session 的 id 就会到服务器里面找对应的 value ,从而解决了问题,但是Session也不是绝对安全,因为也会有人劫持 Session 的 id ,利用 id 到服务器里面找 value ,但 Session 的一个特性是 id 是动态变化的,当你拿到这个id 的时候,就可以能id 就已经变了,相对来说安全性是比较高,但也不是绝对的安全。

4.3.11、获取Cookie

这里用的是 Spring MVC 注解的方式,使用 @CookieValue ,但 也可用 Sevelet 的方式。

@Controller
@ResponseBody 
@RequestMapping(value = "/user") 
public class UserController {

    @RequestMapping("/getCookie") // localhost:8080/user/getCookie
    public String getCookie(@CookieValue String name) {
        return "Cookie-name=" + name;
    }
}

@CookieValue(“xxx”) ,这个括号里面是Cookie 的 name 参数,这里刚刚与 name 的参数保持一致所以不用加括号

因为本身就是模拟,所以自己在浏览器里面设置模拟

image-20230810121629577

4.3.12、获取header

​ User-Agent就是请求中常见的header。

@Controller
@ResponseBody 
@RequestMapping(value = "/user") 
public class UserController {

    @RequestMapping("/getAgent") // localhost:8080/user/getAgent
    public String getAgent(@RequestHeader("User-Agent") String userAgent) {
        return userAgent;
    }
}

​ 获取 http 协议里面的 User-Agent使用的注解是 @Requestheader

4.3.13、获取Session

​ 因为是模拟首先自己先设置存储一个 Session。

@Controller
@ResponseBody 
@RequestMapping(value = "/user") 
public class UserController {
    @RequestMapping("/setSession") // localhost:8080/user/setSession
    public String setSession(String name, HttpServletRequest req) {
        HttpSession session = req.getSession(true); // 有Session就获取,没有就创建
        if (session != null) {
            session.setAttribute("name", name);
        }
        return "Session 设置成功!";
    }
}

url:

localhost:8080/user/setSession?name=java

获取Session:

@Controller
@ResponseBody 
@RequestMapping(value = "/user")
public class UserController {
    @RequestMapping("/getSession") 
    public String getSession(@SessionAttribute(name = "name", required = false) String name) {
        return name;
    }
}

url:

// localhost:8080/user/getSession

4.4、输入数据

​ 返回数据默认情况下返回的是一个静态页面,静态页面的输出,在目录下面写好静态页面的代码,然后再后端惊醒 url 访问就可以了。

@Controller
public class TestController {

    @RequestMapping("/index") // localhost:8080/index
    public String getIndex() {
        return "index.html";
    }
}

​ 这上面的代码是没有加 @ResponseBody 的,所以输出的一直是静态页面,现在完成一个计算器功能使他返回的是一个数据。

@Controller
public class TestController {

    @RequestMapping("/calc") //localhost:8080/calc
    @ResponseBody
    public String calc(Integer num1, Integer num2) {
        return "计算结果:" + (num1 + num2);
    }
}

url:

http://localhost:8080/calc?num1=5&num2=10

结果:

计算结果:15

这就是 使用 @ResponseBody 返回的页面是数据,前面也已经提到过很多次 @ResponseBody 不再额外追溯。

4.4.1、返回Json对象

​ 返回 Json 对象需要是要 HashMap 才能返回 Json 对象格式:

@Controller
public class TestController {

    @RequestMapping("/json") // localhost:8080/json
    @ResponseBody
    public HashMap<String,String> json() {
        HashMap<String ,String > hashMap = new HashMap<>();
        hashMap.put("name","java");
        hashMap.put("password","123");
        return hashMap;
    }
}

​ 如果不使用HashMap的方式,使用的是字符串打印的方式,对于用户在浏览器页面看来说没有什么区别,但是对于前端传递的就是 html 格式的类型,当前端使用数据的时候会识别不到,就会可能出现更多的错误,所以使用 Json 数据的时候后端需要利用HashMap。

4.5、转发与重定向

forward VS redirect

  • redirect (重定向):URL变成了重定向的URL,页面展示正常,可以访问到外部链接;
  • forward(转发):URL没变,访问的页面可能出现问题,外部资源可能加载不到(由服务器端重新转发亲力亲为,路由地址定位可能会出现问题)
@Controller
//@ResponseBody
@RequestMapping("/test")
public class TestController {

    @RequestMapping("/myForward") // localhost:8080/test/myForward
    public String myForward() {
        return "forward:/test.html";
    }

    @RequestMapping("/myRedirect") // localhost:8080/test/myRedirect
    public String myRedirect() {
        return "redirect:/test.html";
    }
}

​ 一遍情况下,使用重定向会比较方便,转发就麻烦容易出错,但是要记住这两个的区别,面试常考。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Zookeeper》源码分析(七)之 NIOServerCnxn的工作原理

目录 NIOServerCnxnreadPayload()handleWrite(k)process() NIOServerCnxn 在上一节IOWorkRequest的doWork()方法中提到会将IO就绪的key通过handleIO()方法提交给NIOServerCnxn处理&#xff0c;一个NIOServerCnxn代表客户端与服务端的一个连接&#xff0c;它用于处理两者之间的…

JavaScript 中 let 和 var 的区别

首先&#xff0c;let 和 var 都是用于声明变量的关键字&#xff0c;在老版 JavaScript 中也许你会见到 var 方式来声明变量&#xff0c;而现如今几乎都是使用 let 进行声明&#xff0c;接下来看看这两个关键字之间的区别。 1、作用域 var var 声明的变量在函数内部有效&#x…

【什么是应变波齿轮又名谐波驱动?机器人应用的完美齿轮组!?】

什么是应变波齿轮又名谐波驱动&#xff1f;机器人应用的完美齿轮组&#xff01;&#xff1f; 1. 什么是应变波齿轮&#xff1f;2. 工作原理3. 应变波齿轮 – 谐波驱动 3D 模型4. 3D 打印应变波齿轮 – 谐波驱动5. 总结 在本教程中&#xff0c;我们将学习什么是应变波齿轮&#…

关于使用 heatmap.js创建热力图并应用在cesuim上的坐标定位问题

废话少说&#xff0c;heatmap.js的用法我不在赘述&#xff0c;此文主要解决其热力点坐标定位在cesuim上的问题。 热力图容器 我们知道&#xff0c;热力图需要用有一个容器节点来存放它生成的图片&#xff1a;<div class"div-heatMap"></div> 而其中容器…

【ElasticSearch入门】

目录 1.ElasticSearch的简介 2.用数据库实现搜素的功能 3.ES的核心概念 3.1 NRT(Near Realtime)近实时 3.2 cluster集群&#xff0c;ES是一个分布式的系统 3.3 Node节点&#xff0c;就是集群中的一台服务器 3.4 index 索引&#xff08;索引库&#xff09; 3.5 type类型 3.6 doc…

360安全卫士右下角广告弹窗太多怎么彻底关闭?

360安全卫士右下角广告弹窗太多怎么彻底关闭&#xff1f; 1、卸载360安全卫士&#xff0c;选择继续卸载&#xff0c;并点击下一步&#xff1b; 2、选择广告弹窗太多&#xff0c;并点击下一步&#xff1b; 3、然后被告知升级极速版永久去广告&#xff0c;可以点击一键去广告。 …

全网超全,接口自动化测试-动态数据生成/替换数据(实战应用)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 接口自动化过程中…

拂袖一挥,zipfile秒列zip包内容

使用wxpython列出文件夹中的zip文件及内容 最近在做一个文件管理的小工具,需要列出选择的文件夹下的所有zip压缩文件,并在点击某个zip文件时能够显示其中的内容。为此我使用了wxpython来实现这个功能。 1. 导入需要的模块 首先导入程序需要的模块: import wx import os imp…

【C++面向对象】--- 继承 的奥秘(上篇)

个人主页&#xff1a;平行线也会相交&#x1f4aa; 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【C之路】&#x1f48c; 本专栏旨在记录C的学习路线&#xff0c;望对大家有所帮助&#x1f647;‍ 希望我们一起努力、成长&…

git强推覆盖其他项目分支

git强推分支&#xff0c;覆盖其他分支&#xff1b; 操作&#xff1a; 下载branch-1.3代码&#xff1b; $ git clone gitlabgitlab.zte.net:zte-dba-service/branch.git $ git remote add origin2 gitlabgitlab.zte.net:zte-service/branch.git $ git push origin2 master -f注…

UE 5 GAS 在项目中处理AttributeSet相关

这一篇文章是个人的实战经验记录&#xff0c;如果对基础性的内容不了解的&#xff0c;可以看我前面一篇文章对基础的概念以及内容的讲解。 设置AttributeSet 使用GAS之前&#xff0c;首先需要设置参数集AS&#xff0c;这个是用于同步的一些参数&#xff0c;至于如何设置GAS&a…

腾讯云Linux服务器创建、使用和配置的教程

腾讯云Linux服务器创建&#xff0c;先注册腾讯云账号&#xff0c;购买云服务器配置然后选择Linux镜像操作系统&#xff0c;包括云服务器地域、CVM实例、公网IP等配置&#xff0c;然后远程链接到腾讯云服务器快速配置使用教程&#xff1a; 目录 腾讯云Linux服务器创建 创建Li…

远程控制医疗行业应用解析:如何满足医院合规需求?

远程控制医疗行业应用解析&#xff1a;如何满足医院合规需求&#xff1f; 作为一个起源于IT行业的技术&#xff0c;以远程桌面为基础的远程控制技术目前在医疗领域也已经有了比较广阔的应用前景&#xff0c;尤其是在医疗数字化系统/设备的远程运维场景&#xff0c;已经有了一些…

Spring Profile与PropertyPlaceholderConfigurer实现项目多环境配置切换

最近考虑项目在不同环境下配置的切换&#xff0c;使用profile注解搭配PropertyPlaceholderConfigurer实现对配置文件的切换&#xff0c;简单写了个demo记录下实现。 基本知识介绍 Profile Profile通过对bean进行修饰&#xff0c;来限定spring在bean管理时的初始化情况&#…

K8S调度

K8S调度 一、List-Watch 机制 controller-manager、scheduler、kubelet 通过 List-Watch 机制监听 apiserver 发出的事件&#xff0c;apiserver 通过 List-Watch 机制监听 etcd 发出的事件1.scheduler 的调度策略 预选策略/预算策略&#xff1a;通过调度算法过滤掉不满足条件…

CH344Q/L USB转四串口芯片资料下载(合集)

1、产品手册 CH344DS1.PDF - 南京沁恒微电子股份有限公司CH344技术手册&#xff0c;USB转4串口芯片&#xff0c;支持最高6M波特率与硬件流控&#xff0c;支持USB配置功能&#xff0c;提供RS485方向控制与GPIO等信号引脚&#xff0c;可实现PC等平台扩展多串口或多个串口设备升级…

多维时序 | MATLAB实现ZOA-CNN-BiGRU-Attention多变量时间序列预测

多维时序 | MATLAB实现ZOA-CNN-BiGRU-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现ZOA-CNN-BiGRU-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab基于ZOA-CNN-BiGRU-Attention斑马优化卷积双向门控循环单元网络…

ARTS 挑战打卡的第7天 --- Ubuntu中的WindTerm如何设置成中文,并且关闭shell中Tab键声音(Tips)

前言 &#xff08;1&#xff09;Windterm是一个非常优秀的终端神器。关于他的下载我就不多说了&#xff0c;网上很多。今天我就分享一个国内目前没有找到的这方面的资料——Ubuntu中的WindTerm如何设置成中文&#xff0c;并且关闭shell中Tab键声音。 将WindTerm设置成中文 &…

Markdown的简单语法学习

简单掌握Markdown语法&#xff1a; 1、标题&#xff1a; 如果一段文字被定义为标题&#xff0c;只要在这段文字前面加#即可。 # 一级标题 ## 二级标题 ### 三级标题 2、列表&#xff1a; 列表分有序列表和无序列表&#xff1a; ###### 无序列表 * 1 * 2 * 3- 1 - 2 - 3#####…

echarts饼图例子

效果 代码&#xff1a;index。vue <div class"riskStatisticsBox"><div class"titleBox">风险统计</div><div class"contentBox"><div class"selectGroupBox"><div class"categoryBox">…