【SpringMVC】| 报文信息转换器HttpMessageConverter

目录

框架搭建

报文信息转换器HttpMessageConverter

1. @RequestBody注解

2. RequestEntity类型

3. @RequestBody注解(常用)

重点:SpringMVC处理json

重点:SpringMVC处理ajax

重点:@RestController注解

4. ResponseEntity(实现文件的上传下载)

文件下载

文件上传

图书推荐《Spring Cloud 微服务快速上手》


框架搭建

pom.xml

<?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>org.example</groupId>
  <artifactId>springmvc-thymeleaf006</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>springmvc-thymeleaf006 Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.thymeleaf</groupId>
      <artifactId>thymeleaf-spring5</artifactId>
      <version>3.0.10.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
      <version>1.2.3</version>
    </dependency>
  </dependencies>

  <build>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.xml</include>
          <include>**/*.properties</include>
        </includes>
        <filtering>false</filtering>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.xml</include>
          <include>**/*.properties</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>

</project>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--注册过滤器:解决post请求乱码问题-->
    <filter>
        <filter-name>encode</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <!--指定字符集-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <!--强制request使用字符集encoding-->
        <init-param>
            <param-name>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <!--强制response使用字符集encoding-->
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <!--所有请求-->
    <filter-mapping>
        <filter-name>encode</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--发送put、delete请求方式的过滤器-->
    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--注册SpringMVC框架-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--配置springMVC位置文件的位置和名称-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!--将前端控制器DispatcherServlet的初始化时间提前到服务器启动时-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!--指定拦截什么样的请求
            例如:http://localhost:8080/demo.action
        -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--配置包扫描-->
    <context:component-scan base-package="com.zl.controller"/>
    <!--视图控制器,需要搭配注解驱动使用-->
    <mvc:view-controller path="/" view-name="index"/>
    <!--专门处理ajax请求,ajax请求不需要视图解析器InternalResourceViewResolver-->
    <!--但是需要添加注解驱动,专门用来解析@ResponseBody注解的-->
    <!--注入date类型时,需要使用@DateTimeFormat注解,也要搭配这个使用-->
    <mvc:annotation-driven/>
    <!--开放对静态资源的访问,需要搭配注解驱动使用-->
    <mvc:default-servlet-handler/>

    <!-- 配置Thymeleaf视图解析器 -->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <!-- 视图前缀 -->
                        <property name="prefix" value="/WEB-INF/templates/"/>
                        <!-- 视图后缀 -->
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>

</beans>

报文信息转换器HttpMessageConverter

(1)HttpMessageConverter,报文信息转换器,将请求报文转换为Java对象或将Java对象转换为响应报文。

(2)HttpMessageConverter提供了两个注解和两个类型:@RequestBody、@ResponseBody、RequestEntity、ResponseEntity!

1. @RequestBody注解

@RequestBody可以获取请求体,需要在控制器方法设置一个形参使用@RequestBody进行标识,当前请求的请求体就会为当前注解所标识的形参赋值! 

回顾:请求报文有三个部分组成:请求头、请求空行、请求体;对于Get请求没有请求体,只有Post请求才有请求体。因为Get请求会把请求参数拼接到地址栏,而Post请求则是放到请求体当中!

form表单提交数据

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<form th:action="@{/testRequestBody}" method="post">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    <input type="submit" value="测试@RequestBody注解">
</form>

</body>
</html>

controller获取到请求体

package com.zl.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HttpMessageConverterController {
    @RequestMapping("/testRequestBody")
    public String testRequestBody(@RequestBody String requestBody){
        System.out.println("requestBody:"+requestBody);
        return "success";
    }
}

执行结果

注:如果没有使用@RequestBody注解拿到的就是一个null! 

2. RequestEntity类型

RequestEntity封装请求报文的一种类型,也是需要在控制器方法的形参中设置该类型的形参,当前请求的请求报文就会赋值给该形参,可以通过getHeaders()获取请求头信息,通过getBody()获取请求体信息。

注:@RequestBody注解只是获取请求体信息,而RequestEntity可以获取整个请求信息!

form表单提交数据

<form th:action="@{/testRequestEntity}" method="post">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    <input type="submit" value="测试RequestEntity"><br>
</form>

controller获取到请求体

    @RequestMapping("/testRequestEntity")
    public String testRequestEntity(RequestEntity<String> requestEntity){
        // 获取请求头
        System.out.println("requestHeader:"+requestEntity.getHeaders());
        // 获取请求体
        System.out.println("requestBody:"+requestEntity.getBody());
        return "success";
    }

执行结果

3. @RequestBody注解(常用)

@ResponseBody用于标识一个控制器方法上,可以将该方法的返回值直接作为响应报文的响应体响应到浏览器! 

回顾:以前使用原生的ServletAPI响应数据到浏览器

前端发出请求

<a th:href="@{/testServletAPI}">使用原生的ServletAPI响应数据到浏览器</a>

controller获取到请求,相应数据到浏览器

    @RequestMapping("/testServletAPI")
    public void testServletAPI(HttpServletResponse response) throws IOException {
        // 调用getWriter方法获取到一个流
        PrintWriter out = response.getWriter();
        // 响应到浏览器
        out.println("Hello,Response");

    }

执行结果

现在:使用@ResponseBody注解响应数据到浏览器

前端发出请求

<a th:href="@{/testResponseBody}">使用@RequestBody注解响应数据到浏览器</a>

controller获取到请求,相应数据到浏览器

注:如果没有使用@ResponseBody注解,此时返回的success就会被当做视图名称被前端控制器加上前缀和后缀进行进行页面的跳转。如果加上@ResponseBody注解,此时返回的值就不会当做视图名称,而是当前响应体!

    @RequestMapping("/testResponseBody")
    @ResponseBody
    public String testRequestBody(){
        return "success..........";
    }

执行结果

重点:SpringMVC处理json

浏览器是只能识别字符串的,那么假如我们返回的是一个Java对象呢?此时浏览器就无法识别报错!怎么解决?转换成Json格式的数据!

User对象

package com.zl.bean;

import java.time.Period;

public class User {
    private String name;
    private Integer age;
    private String sex;

    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public User() {
    }

    public User(String name, Integer age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
}

返回一个User对象

    @RequestMapping("/testResponseUser")
    @ResponseBody
    public User testResponseUser(){
        return new User("张三",18,"男");
    }

执行结果:无法响应Java对象

@ResponseBody处理json的步骤 

①导入jackson的依赖

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.1</version>
</dependency>

②在SpringMVC的核心配置文件中开启mvc的注解驱动

注解驱动<mvc:annotation-driven/>:专门用来解析@ResponseBody注解的;此时在HandlerAdaptor中会自动装配一个消息转换器:MappingJackson2HttpMessageConverter,可以将响应到浏览器的Java对象转换为Json格式的字符串。

 <mvc:annotation-driven/>

③在处理器方法上使用@ResponseBody注解进行标识;此时将Java对象直接作为控制器方法的返回值返回,就会自动转换为Json格式的字符串

    @RequestMapping("/testResponseUser")
    @ResponseBody
    public User testResponseUser(){
        return new User("张三",18,"男");
    }

执行结果:把Java对象转换成Json格式的字符串显示到浏览器上

注:Json实际上有两种格式,使用大括号{}就是Json对象、使用方括号[]就是Json数组!对于对象我们使用 点 的方式进行访问,对于数组我们通过遍历的方式进行访问。例如:Java对象、Map集合转化成Json都是对象的形式存在、List集合转换成Json是以数组的方式存在。

注:实际上只增加了一个jackson的依赖就可以了,因为注解驱动前面很多地方都用到,例如:视图控制器、处理静态资源,上来就配置上了;而@Response注解是我们一直要用的。

重点:SpringMVC处理ajax

使用Vue发送ajax请求,需要引入两个库:

发送Ajax请求

注:这里ajax发送请求的导入库的时候:<script></script>不能写成<script />

<div id="app">
    <a @click="textAxios" th:href="@{/textAxios}">SpringMVC发送ajax请求</a>
</div>
<!--导入库,不能直接斜杠结尾,必须使用</script>才可以-->
<script type="text/javascript" th:src="@{/static/js/vue.js}" ></script>
<script type="text/javascript" th:src="@{/static/js/axios.min.js}" ></script>
<!--编写-->
<script type="text/javascript">
    new Vue({
        // 绑定容器
        el:"#app",
        // 触发事件
        methods:{
            // 发送ajax请求
            textAxios:function(event){
                // ajax请求
                axios({
                    method:"post",
                    url:event.target.href,
                    params:{
                        username:"admin",
                        password:"123"
                    }
                }).then(function (response){ // 就相当于使用ajax的回调函数
                    alert(response.data);
                });
                // 取消超链接的默认行为
                event.preventDefault();
            }
        }
    });
</script>

控制器方法

    @RequestMapping("/textAxios")
    @ResponseBody
    public String testAjax(String username,String password){
        System.out.println("username:"+username+",password:"+password);
        return username+","+password;
    }

执行结果:成功拿到ajax发送的数据,并且不会页面跳转

重点:@RestController注解

@RestController注解是springMVC提供的一个复合注解,标识在控制器的类上,就相当于为类添加了@Controller注解,并且为其中的每个方法添加了@ResponseBody注解。

4. ResponseEntity(实现文件的上传下载)

ResponseEntity用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览器的响应报文 !

注:使用ResponseEntity实现下载文件的功能!

文件下载

前端发出请求

<!--文件下载-->
<a th:href="@{/testDown}">下载1.jpg</a>

后端处理

第一步:创建一个方法,方法的返回值就是ResponseEntity类型,方法的参数就是HttpSession对象。

第二步:根据session对象获取到上下文对象applocation对象,然后调用application对象的getRealPath方法,获取到在该项目中的文件的真实路径。

第三步:根据这个真实路径创建一个IO输入流去读取数据;并创建一个byte数组,参数是is.avaliavle()表示获取该文件的所有字节,这样就不要循环了;调用read方法进行读取,返回的是读取到字节的数量,将流读取到字节数组中去。

第四步:创建响应头信息HttpHeaders对象,并调用add方法设置下载的方式以及文件的名字

第五步:设置响应状态码。

第六步:创建ResponseEntity对象,参数有三个:响应体、响应头、状态码。

第七步:关闭IO流,返回ResponseEntity对象。

@Controller
public class FileUpAndDownController {
    @RequestMapping("/testDown")
    // 方法的返回值就是ResponseEntity类型
    public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {
        //获取ServletContext上下文对象
        ServletContext application = session.getServletContext();
        //获取服务器中文件的真实路径
        String realPath = application.getRealPath("/static/img/1.jpg");
        //创建输入流
        InputStream is = new FileInputStream(realPath);
        //创建字节数组
        byte[] bytes = new byte[is.available()];
        //将流读到字节数组中
        is.read(bytes);
        //创建HttpHeaders对象设置响应头信息
        MultiValueMap<String, String> headers = new HttpHeaders();
        //设置要下载方式以及下载文件的名字(固定的)
        headers.add("Content-Disposition", "attachment;filename=1.jpg");
        //设置响应状态码
        HttpStatus statusCode = HttpStatus.OK;
        //创建ResponseEntity对象(响应体、响应头、状态码)
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers, statusCode);
        //关闭输入流
        is.close();
        return responseEntity;
    }
}

执行结果

文件上传

(1)文件上传要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data"。默认这个值等于enctype="application/x-www-form-urlencoded",表示key=value的方式传输;设置成enctype="multipart/form-data",此时就是以二进制的方式传输。

(2)SpringMVC中将上传的文件封装到MultipartFile对象中,通过此对象可以获取文件相关信息。

前端发出请求

<!--文件上传-->
<form th:action="@{/testUp}" method="post" enctype="multipart/form-data">
    头像:<input type="file" name="photo"><br>
    <input type="submit" value="上传">
</form>

a>添加依赖

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>

b>在springmvc.xml的配置文件中添加配置

注:SpringMVC是根据id获取这个Bean的,并且这个id必须叫multipartResolver!实际上我们需要的是MultipartResolver对象,但它是一个接口,所以就使用了它的实现类CommonsMultipartResolver对象。

<!--必须通过文件解析器的解析才能将文件转换为MultipartFile对象-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>

c>控制器方法

注:把上传的对象封装到MultipartFile对象当中去!

第一步:通过前面的CommonsMultipartResolver把传过来的photo转换成MultipartFile对象。

第二步:调用getOriginalFilename获取上传的文件名,例如:1.jpg。

第三步:解决文件重名问题,首先通过截取,获得文件的后缀;然后调用UUID.randomUUID().toString()方法获取一个32位的UUID,与得到的后缀名拼接一起。

第四步:通过session对象获取到application对象,调用方法获取一个目录的路径;如果还要判断这个目录是否存在,如果不存在就创建。

第五步:拼接一个新的目录:目录路径+分隔符+文件名。

第六步:调用transferTo方法实现上传功能。

    @RequestMapping("/testUp")
    public String testUp(MultipartFile photo, HttpSession session) throws IOException {
        //获取上传的文件的文件名
        String fileName = photo.getOriginalFilename();
        //处理文件重名问题
        String hzName = fileName.substring(fileName.lastIndexOf("."));
        fileName = UUID.randomUUID().toString() + hzName;
        //获取服务器中photo目录的路径
        ServletContext application = session.getServletContext();
        String photoPath = application.getRealPath("photo"); // 设置上传的位置,就是webapp下的photo
        // 创建目录(没有就创建)
        File file = new File(photoPath);
        if(!file.exists()){
            file.mkdir();
        }
        // 真正的路径:目录+分隔符+文件名
        String finalPath = photoPath + File.separator + fileName;
        //实现上传功能
        photo.transferTo(new File(finalPath));
        return "success";
    }

执行结果

图书推荐《Spring Cloud 微服务快速上手》

参与方式:

本次送书 2 本! 
活动时间:截止到 2023-06-15 00:00:00。

抽奖方式:利用程序进行抽奖。

参与方式:关注博主(只限粉丝福利哦)、点赞、收藏,评论区随机抽取,最多三条评论!

其它图书详情了解:IT BOOK 多得 

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

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

相关文章

day1-若依项目前后端分离的初步使用

响应式布局: 做好的产品能在pc端,手机,平板都能正常浏览 开发项目两种方式 1.自己从0开始写代码 2.在若依中下载拥有基础功能的源码 若依使用的mysql版本 mysql5.7 导入别人的项目如何操作 若依项目下载地址**:https://gitee.com/y_project/RuoYi-Vue.git** 可以使用揉…

AIPRM for ChatGPT 提示词模板扩展工具实践

&#xff08;1&#xff09;基本介绍 AIPRM for ChatGPT是一个Chrome浏览器扩展程序&#xff0c;基于Chromium内核开发的浏览器都可以使用该扩展&#xff0c;比如微软的Edge浏览器等。 在AIPRM的帮助下&#xff0c;我们可以在ChatGPT中一键使用各种专门为网站SEO、SaaS、营销、…

Transformer(四)--实现验证:transformer 机器翻译实践

转载请注明出处&#xff1a;https://blog.csdn.net/nocml/article/details/125711025 本系列传送门&#xff1a; Transformer(一)–论文翻译&#xff1a;Attention Is All You Need 中文版 Transformer(二)–论文理解&#xff1a;transformer 结构详解 Transformer(三)–论文实…

idea搭建springmvc

Spring MVC是一种基于MVC模式的框架&#xff0c;它是Spring框架的一部分。它提供了一种更简单和更有效的方式来构建Web应用程序。它提供了一系列的功能&#xff0c;可以帮助您更快地构建Web应用程序&#xff0c;如控制器&#xff0c;视图&#xff0c;模型&#xff0c;数据绑定&…

如何用Airtest脚本无线连接Android设备?

1. 前言 之前我们已经详细介绍过如何用AirtestIDE无线连接Android设备&#xff1a; 手把手教你用AirtestIDE无线连接手机&#xff01; &#xff0c;它的关键点在于&#xff0c;需要先 adb connect 一次&#xff0c;才能点击 connect 按钮无线连接上该设备&#xff1a; 但是有很…

20230705点亮STC32G实验箱9.6(STC32G12K128)开发板的跑马灯LED(深入了解)

08第六集&#xff1a;LED闪烁第六集&#xff1a;LED闪烁和花式点灯上和花式点灯上.mp4 09第六集&#xff1a;LED闪烁和花式点灯下.mp4 【大文哥学习32位8051】20230704【冲哥视频】第六集的晶振时钟的学习困惑 2023/7/5 17:36 delay_ms(3000); 刷机的时候如果使用11.0592M的Fos…

【LeetCode周赛】2022上半年题目精选集——思维题

文章目录 2211. 统计道路上的碰撞次数&#xff08;栈 || 脑筋急转弯&#xff09;解法1&#xff1a;自己想的——使用栈解法2——思维&#xff1a;去掉左右两边往左右开的车代码写法1——找左右端点代码写法2——正则表达式去除流处理api补充&#xff1a;replaceAll() 和 正则表…

python图像处理实战(三)—图像几何变换

&#x1f680;写在前面&#x1f680; &#x1f58a;个人主页&#xff1a;https://blog.csdn.net/m0_52051577?typeblog &#x1f381;欢迎各位大佬支持点赞收藏&#xff0c;三连必回&#xff01;&#xff01; &#x1f508;本人新开系列专栏—python图像处理 ❀愿每一个骤雨初…

c语言修炼之猜数字游戏

前言 小伙伴们&#xff0c;今天来学习猜数字游戏叭&#xff01;废话不多说&#xff0c;让我们一起开始学习叭! 思路&#xff1a; 一打开游戏就出现一个菜单然后可以让我们选择是进入游戏还是退出游戏&#xff01; #include<stdio.h> void menu() {printf("*****…

【MySQL】基本查询之表的增删改查

【MySQL】表的增删改查 一、插入操作----insert1.1 简单插入1.2 插入时是否更新----ON DUPLICATE KEY UPDATE1.3 插入时替换----REPLACE 二、查询----select2.1 简单查询与去重2.2 基本查询----where条件2.2.3 案列演示 2.4 排序----order by 三、修改操作----update四、删除--…

Lua学习笔记:浅谈table的实现

前言 本篇在讲什么 Lua中的table的实现 本篇适合什么 适合初学Lua的小白 本篇需要什么 对Lua语法有简单认知 依赖Sublime Text编辑器 本篇的特色 具有全流程的图文教学 重实践&#xff0c;轻理论&#xff0c;快速上手 提供全流程的源码内容 ★提高阅读体验★ &…

大数据Doris(五十三):MySQL Dump 导出

文章目录 MySQL dump 导出 一、Dump导出案例 二、注意事项 MySQL Dump 导出 mysqldump是一个常用的 MySQL 数据库备份工具&#xff0c;它可以将 MySQL 数据库中的数据导出为 SQL 格式的文件&#xff0c;从而实现对数据的备份、迁移和恢复等操作。Doris 在0.15 之后的版本已…

青岛大学_王卓老师【数据结构与算法】Week04_03_双向链表_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c;另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础–…

Spring Boot 集成 Redisson分布式锁

Redisson 是一种基于 Redis 的 Java 驻留集群的分布式对象和服务库&#xff0c;可以为我们提供丰富的分布式锁和线程安全集合的实现。在 Spring Boot 应用程序中使用 Redisson 可以方便地实现分布式应用程序的某些方面&#xff0c;例如分布式锁、分布式集合、分布式事件发布和订…

Oracle数据库软件安装与卸载

Oracle数据库软件安装与卸载 实验目的及要求 学习Oracle12c数据库服务器软件和客户端软件的安 装与卸载,掌握客户端服务名的设置,建立客户端与服务器的网络连接,熟悉windows操作系统中Oracle相关服务的操作。理解数据库管理的基本架构。 &#xff08;1&#xff09;熟悉Oracle…

基于SpringBoot+SpringCloud+vue的智慧养老平台设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

虚拟机上用docker + nginx跑前端并支持https和http

情况是这样&#xff0c;我在虚拟机上&#xff0c;使用docker跑前端&#xff0c;需要这个前端支持https&#xff0c;原http的话自动跳转到https。另外&#xff0c;前端部署使用了负载均衡&#xff0c;即使用了3个docker跑前端&#xff1a;1个入口&#xff0c;另外2个是前端&…

【macOS 系列】mac设置截屏或其他操作的默认保存位置

1、第一步、在用户/图片文件夹下&#xff0c;新建“截图”文件夹 2、第二步、打开终端&#xff0c;输入defaults write com.apple.screencapture location ~/Pictures/截图/后回车 3、第三步、操作完成后&#xff0c;再次输入killall SystemUIServer后回车 如果你在web前端开发…

clickhouse中时间戳转换--网上都没有,自己总结的

第一种&#xff1a; 库里时间戳为13位时&#xff1a; 类似这种13位的时间戳&#xff1a;1476141341051 怎么转换成正常的日期&#xff1a; 如果库里存的string类型&#xff0c;需要toUInt64(date_time) date_time的值为&#xff1a;1476141341051 然后利用toDateTime&…

远古 Windows 98 SE 和 putty 0.63 连接 SSH

远古 Windows 98 SE 和 putty 0.63 连接 SSH 不忘初心一、故障表现二、产生原因三、解决办法四、重启 SSHD 服务生交配置参考 作者&#xff1a;高玉涵 时间&#xff1a;2023.7.1 操作系统&#xff1a; Windows 98 第二版 4.10.2222 A Linux version 5.19.0-32-generic (build…
最新文章