快速入门:使用 Spring Boot 构建 Web 应用程序

这篇具有很好参考价值的文章主要介绍了快速入门:使用 Spring Boot 构建 Web 应用程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本文将讨论以下主题:

  1. 安装 Java JDK、Gradle 或 Maven 和 Eclipse 或 IntelliJ IDEA
  2. 创建一个新的 Spring Boot 项目
  3. 运行 Spring Boot 应用程序
  4. 编写一个简单的 Web 应用程序
  5. 打包应用程序以用于生产环境

通过这些主题,您将能够开始使用 Spring Boot 并创建自己的 Web 应用程序。

介绍

Spring Boot是一个用于构建基于Spring的应用程序的框架。它通过提供一些默认配置和约定来简化开发过程,使得构建可独立运行的、生产级别的应用程序变得更加容易。

Spring Boot简介

Spring Boot是Spring框架的扩展版本,可以帮助开发者更快地创建基于Spring的应用程序。与传统的Spring开发相比,Spring Boot采用了自动配置机制,可以省去大量繁琐的配置,同时还提供了很多常用功能的依赖库,例如Web、JPA、数据源等。

为什么选择Spring Boot

相对于其他Java开发框架,Spring Boot有以下优点:

  • 快速开发:使用Spring Boot可以快速搭建一个Web应用程序,并具有一些默认的配置,例如自动配置数据源、日志、信息视图等。
  • 易于部署:Spring Boot应用程序可以打成jar包或war包并独立运行,这样就不需要安装Tomcat或其他Web服务器。
  • 社区活跃:Spring Boot拥有庞大的社区支持,提供了丰富的文档和示例代码,方便开发者学习和使用。

非常感谢您的反馈,以下是更加详细的安装步骤:

准备工作

在开始创建Spring Boot项目之前,需要安装并配置好以下软件:

  • Java JDK:Java开发环境
  • Gradle或Maven:构建工具,用于管理项目依赖项和构建过程
  • Eclipse或IntelliJ IDEA:集成开发环境,用于编写和调试代码

安装Java JDK

首先需要安装Java JDK,可以从官方网站下载对应版本的JDK进行安装。建议选择最新的稳定版JDK。
JAVA8
快速入门:使用 Spring Boot 构建 Web 应用程序,从零开始学JAVA,spring boot,后端,java

你可以根据大多数教程先配置JAVA_HOME,然后再去系统变量path中添加%JAVA_HOME%\bin
快速入门:使用 Spring Boot 构建 Web 应用程序,从零开始学JAVA,spring boot,后端,java
也可以直接添加bin完整目录
快速入门:使用 Spring Boot 构建 Web 应用程序,从零开始学JAVA,spring boot,后端,java
查看版本

java -version

安装Gradle或Maven

接下来需要安装Gradle或Maven。Gradle是一种基于Groovy语言的构建工具,而Maven是一种基于XML的构建工具。两者都可以用于管理项目依赖项和构建过程,这里介绍其中一种。

安装Gradle

Gradle是一个构建工具,面向开发者的脚本语言是Groovy和Kotlin这里不做过多介绍

  1. 下载Gradle二进制文件:访问Gradle官网,下载最新的Gradle二进制文件。
  2. 解压缩Gradle二进制文件:将下载的Gradle二进制文件解压缩到任意目录中。
  3. 配置环境变量:将Gradle的bin目录添加到系统的环境变量PATH中,确保可以在命令行中使用Gradle。
  4. 通过 gradle -v 来查看版本。
安装Maven
  1. 下载Maven二进制文件:访问Maven官网,下载最新的Maven二进制文件。
  2. 解压缩Maven二进制文件:将下载的Maven二进制文件解压缩到任意目录中。
  3. 配置环境变量:将Maven的bin目录添加到系统的环境变量PATH中,确保可以在命令行中使用Maven。
  4. 通过 mvn -v 来查看版本。

安装Eclipse或IntelliJ IDEA

最后需要安装一个集成开发环境(IDE),如Eclipse或IntelliJ IDEA。

安装Eclipse
  1. 下载Eclipse:访问Eclipse官网,下载最新的Eclipse IDE for Java Developers。
  2. 解压缩Eclipse:将下载的Eclipse压缩包解压缩到任意目录中。
  3. 启动Eclipse:执行Eclipse根目录下的eclipse.exe文件,启动Eclipse。

以上就是安装Java JDK、Gradle或Maven、Eclipse或IntelliJ IDEA的具体步骤。如果您已经完成了上述步骤,就可以开始创建Spring Boot项目了。
非常感谢您的反馈,以下是对IntelliJ IDEA的安装教程和如何通过cmd查看Java JDK、Gradle、Maven版本的介绍:

安装IntelliJ IDEA

IntelliJ IDEA是一种常用的Java开发IDE,可以从官方网站JetBrains官网下载适合自己电脑的版本进行安装。根据操作系统选择对应的版本进行下载,然后按照向导进行安装即可。

创建Spring Boot项目

Spring Initializr是一个web应用程序,用于生成基于Spring Boot的新项目,我们可以直接访问它的网站Spring Initializr进行使用。下面将演示如何使用Spring Initializr创建一个新项目。

  1. 打开Spring Initializr网站
  2. 选择“Project”页面,选择构建工具和Spring Boot版本
  3. 选择“Dependencies”页面,添加所需依赖项
  4. 点击“Generate”按钮以生成项目框架
.
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/example/demo/
│   │   │       └── DemoApplication.java
│   │   └── resources/
│   │       ├── application.properties
│   │       └── static/
│   └── test/
│       ├── java/
│       │   └── com/example/demo/
│       │       └── DemoApplicationTests.java
│       └── resources/
│           └── application_test.properties
├── pom.xml
└── README.md

使用 Maven 构建 Spring Boot 项目

快速入门:使用 Spring Boot 构建 Web 应用程序,从零开始学JAVA,spring boot,后端,java

分析项目结构

使用Maven构建Spring Boot项目时,它将使用标准的Maven目录结构:

├── src
│   ├── main
│   │   ├── java            # Java源代码
│   │   └── resources       # 配置文件、资源文件等
│   └── test
│       ├── java            # 测试代码
│       └── resources       # 测试配置文件、资源文件等
└── pom.xml                  # Maven项目描述文件

pom.xml中添加spring-boot-starter-parent作为父依赖项,这将提供Spring Boot所需的所有默认设置。还可以添加其他任何需要的依赖项。例如,在本例中,我们将添加Web依赖项。

<project xmlns="http://maven.apache.org/POM/4.0.0"
         <!--...-->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>{spring-boot-version}</version>
        </parent>

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
</project>
运行应用程序

使用Maven运行Spring Boot应用程序很容易。只需要执行以下命令即可:

mvn spring-boot:run

IntelliJ IDEA maven配置
快速入门:使用 Spring Boot 构建 Web 应用程序,从零开始学JAVA,spring boot,后端,java

Whitelabel

这将启动应用程序并在控制台中输出应用程序的日志信息。当应用程序启动后,可以在Web浏览器中访问localhost:8080查看结果。
快速入门:使用 Spring Boot 构建 Web 应用程序,从零开始学JAVA,spring boot,后端,java

因为应用程序没有正确处理Web请求而导致了Whitelabel错误。按照以下步骤可以解决该问题:

  1. 确认404页面是Spring Boot的默认错误页面,表示我们的请求在Web服务中不存在。

  2. 创建一个新的控制器类,并添加相应的方法来处理Web请求。例如,在您的项目中创建一个名为HelloController的类,实现以下功能:

    • 响应/hello请求。
    • 返回“hello, springboot”。
  3. 修改HelloController类并导入所需的依赖项,如下所示:

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
public class HelloController {

    @GetMapping("/hello")
    @ResponseBody
    public String hello() {
        return "hello, springboot";
    }

}

快速入门:使用 Spring Boot 构建 Web 应用程序,从零开始学JAVA,spring boot,后端,java

  1. 重新启动应用程序并访问http://localhost:8080/hello,您应该会看到类似于“hello, springboot”的消息。如果能正常响应,则说明问题已经解决了。

快速入门:使用 Spring Boot 构建 Web 应用程序,从零开始学JAVA,spring boot,后端,java

使用 Gradle 构建 Spring Boot 项目

Gradle是一个构建工具,面向开发者的脚本语言是Groovy和Kotlin这里不做过多介绍

分析项目结构

使用Gradle构建Spring Boot项目时,它将使用标准的Gradle目录结构:

├── build.gradle      # Gradle项目描述文件
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── settings.gradle   # Gradle项目设置文件
├── src
│   ├── main
│   │   ├── java      # Java源代码
│   │   └── resources # 配置文件、资源文件等
│   └── test
│       ├── java      # 测试代码
│       └── resources # 测试配置文件、资源文件等

build.gradle中添加spring-boot-starter作为依赖项,这将提供Spring Boot所需的所有默认设置。还可以添加其他任何需要的依赖项。例如,在本例中,我们将添加Web依赖项。

plugins {
    id 'java'
    id 'org.springframework.boot' version '{spring-boot-version}'
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
}
运行应用程序

使用Gradle运行Spring Boot应用程序很容易。只需要执行以下命令即可:

./gradlew bootRun

这将启动应用程序并在控制台中输出应用程序的日志信息。当应用程序启动后,可以在Web浏览器中访问localhost:8080查看结果。

编写第一个Web应用程序

使用 Maven

创建一个名为DemoController的类,它将处理来自Web浏览器的HTTP请求,并返回一条消息。

@RestController
public class DemoController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello World";
    }
}

与使用Gradle时相同,@RestController注解表示这个类将处理HTTP请求,并且@GetMapping注解表示这个方法将处理HTTP GET请求。在这种情况下,当用户访问/hello时,将调用hello()方法并返回一个字符串。

现在,重新启动应用程序并在Web浏览器中访问localhost:8080/hello,您应该看到一个包含"Hello World"消息的响应。

使用 Gradle

创建一个名为DemoController的类,它将处理来自Web浏览器的HTTP请求,并返回一条消息。

@RestController
public class DemoController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello World";
    }
}

@RestController注解表示这个类将处理HTTP请求,并且@GetMapping注解表示这个方法将处理HTTP GET请求。在这种情况下,当用户访问/hello时,将调用hello()方法并返回一个字符串。

现在,重新启动应用程序并在Web浏览器中访问localhost:8080/hello,您应该看到一个包含"Hello World"消息的响应。

打包成可执行jar包

我们还可以将Spring Boot应用程序打包成可执行的jar文件。在pom.xml或build.gradle文件中添加以下插件依赖:

使用Maven:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

使用Gradle:

plugins {
    id 'org.springframework.boot' version '2.5.1'
}

bootJar {
    enabled = true
}

然后执行以下命令进行打包:

  • 使用Maven:
mvn package

mvn packagemvn clean package都是Maven命令,用于构建项目并生成可执行的JAR或WAR文件。

mvn package会执行以下步骤:

  1. 编译源代码
  2. 运行单元测试
  3. 打包编译后的代码到JAR或WAR文件中

mvn clean package则会在执行以上步骤之前先执行清理操作,即删除已经生成的目标文件夹以及其他编译产生的临时文件。然后再执行上述步骤。

因此,mvn clean packagemvn package更加彻底,可以确保您得到最新的编译结果。如果您在编译过程中遇到了问题,并且认为这些问题可能与缓存数据有关,则可以尝试使用mvn clean package来解决这些问题。

总之,mvn clean package相对于mvn package会花费更多的时间,但通常会更安全、更可靠,可以防止一些不必要的错误。

  • 使用Gradle:
gradlew build

打包完成后,可以在target/目录下找到生成的可执行jar文件。要运行jar文件,请使用以下命令:

java -jar target\demo-0.0.1-SNAPSHOT.jar 

实现热部署

对于开发人员而言,热部署是一个非常有用的功能,可以避免频繁重启应用程序。Spring Boot提供了两种方式实现热部署:使用spring-boot-devtools和JRebel插件。

spring-boot-devtools

spring-boot-devtools是一个内置的开发者工具,可以自动检测代码更改并重新加载应用程序。要使用spring-boot-devtools,只需在pom.xml或build.gradle中添加以下依赖项:

使用Maven:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
</dependencies>

使用Gradle:

dependencies {
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
}

启用IDEA的“Make Project Automatically”选项。在IDEA中,可以通过选中菜单栏的"File -> Settings -> Build, Execution, Deployment -> Compiler"来启用自动构建。

在IDE中启动应用程序并进行调试时,任何更改都会自动重新加载应用程序。
你需要先打开自动构建项目
快速入门:使用 Spring Boot 构建 Web 应用程序,从零开始学JAVA,spring boot,后端,java
快速入门:使用 Spring Boot 构建 Web 应用程序,从零开始学JAVA,spring boot,后端,java
Debug模式快速入门:使用 Spring Boot 构建 Web 应用程序,从零开始学JAVA,spring boot,后端,java启动后,快速入门:使用 Spring Boot 构建 Web 应用程序,从零开始学JAVA,spring boot,后端,java即可自动检测代码更改并重新加载应用程序

快速入门:使用 Spring Boot 构建 Web 应用程序,从零开始学JAVA,spring boot,后端,java

切换Maven仓库路径,不放在C盘

在Windows操作系统上切换Maven本地存储库路径并创建空文件夹的具体教程:

  1. 打开资源管理器,找到要用于存储Maven本地存储库的新文件夹的位置。例如,可以创建一个名为“repository”的文件夹。

  2. 在该文件夹中右键单击,选择“新建”>“文件夹”,然后命名为“repository”。

  3. 打开Maven的配置文件settings.xml。该文件通常位于Maven的安装目录下的conf文件夹中。

  4. 找到以下行:

<localRepository>${user.home}/.m2/repository</localRepository>

快速入门:使用 Spring Boot 构建 Web 应用程序,从零开始学JAVA,spring boot,后端,java

  1. 添加新文件夹的路径。例如,如果新文件夹位于E:\Downloads\apache-maven-3.8.5-bin\repository文件夹中,则为:
<localRepository>E:\Downloads\apache-maven-3.8.5-bin\repository</localRepository>
  1. 保存settings.xml文件并关闭它。

  2. 现在,在新的本地存储库路径(即E:\Downloads\apache-maven-3.8.5-bin\repository)中创建一个空的pom.xml文件。这个文件可以是一个空文件,也可以包含一些基本信息和依赖项。您可以使用文本编辑器或Maven命令行工具来创建这个文件,具体取决于您的喜好。

  3. 在新的Maven本地存储库中构建您的项目。Maven将自动在新的本地存储库中查找需要的依赖项,并将其下载到该位置。

  4. 项目终端输入 mvn spring-boot:run在第一次构建项目时,Maven将自动在新的本地存储库中创建所需的目录结构和文件,并下载所有需要的依赖项。这可能会花费一些时间,具体取决于您的网络速度和依赖项的数量。快速入门:使用 Spring Boot 构建 Web 应用程序,从零开始学JAVA,spring boot,后端,java

快速入门:使用 Spring Boot 构建 Web 应用程序,从零开始学JAVA,spring boot,后端,java

请注意,在使用新的本地存储库之前,确保您已经更新了settings.xml文件以指向新的本地存储库路径。如果您在settings.xml文件中没有更新localRepository元素的值,则Maven仍然会在默认位置${user.home}/.m2/repository中查找依赖项,而不是在新的本地存储库中。

  1. IDEA同步路径
    快速入门:使用 Spring Boot 构建 Web 应用程序,从零开始学JAVA,spring boot,后端,java

Maven的常用命令:

  1. mvn dependency:purge-local-repository:该命令将从本地存储库中删除所有已解析的依赖项和插件。这对于解决依赖项版本冲突或清理本地存储库非常有用。

  2. mvn dependency:tree:该命令将以树形结构显示项目依赖项及其传递依赖项。这对于检查依赖项版本、冲突或排除不需要的依赖项非常有用。

  3. mvn dependency:list:该命令将列出当前项目的所有依赖项。它与 mvn dependency:tree 不同之处在于,它只列出直接依赖项而不显示传递依赖项。

  4. mvn dependency:resolve:该命令将解析并下载所有项目依赖项,但不会将它们复制到本地存储库中。

  5. mvn dependency:analyze:该命令将分析项目依赖项并生成报告,其中包含未使用的依赖项和可能产生潜在问题的依赖项。

  6. mvn clean package:清空目标文件夹并打包项目为JAR或WAR文件。

  7. mvn clean install:清空目标文件夹并安装项目到本地Maven存储库中。

  8. mvn package -DskipTests:打包项目并跳过测试。这可以在您需要快速构建项目时使用,而不必等待测试完成。

  9. mvn clean package -Dmaven.test.skip=true:清空目标文件夹并打包项目为JAR或WAR文件,同时跳过测试。

  10. mvn archetype:generate:生成Maven项目原型。该命令允许您选择要创建的项目类型和模板,并自动生成项目结构。

  11. mvn site:生成项目站点文档。这将生成静态HTML网页,其中包含有关项目的各种信息,例如源代码、测试结果、依赖项、开发者列表等。

  12. mvn versions:display-dependency-updates:检查项目依赖项的最新版本,并将其与当前版本进行比较。这可帮助您确定哪些依赖项需要更新。

请注意,这些只是一些常用的Maven命令,还有很多其他命令和选项可供使用。要了解更多信息,请参阅Maven文档或运行mvn --help命令以获取完整的帮助文档。

这些命令可以帮助你管理项目依赖项,解决依赖项相关问题,并确保项目的稳定性和可靠性。

总结

通过本文,您已经了解了如何使用Spring Boot创建Web应用程序。我们首先讨论了Spring Boot的基础知识,然后介绍了如何设置您的开发环境。接下来,我们演示了如何使用Maven和Gradle构建Spring Boot项目,并分析了项目的结构。最后,我们编写了一个简单的Web应用程序,并演示了如何打包成可执行jar包和实现热部署。

我们希望本文对您有所帮助,使您能够以更快、更轻松的方式创建优秀的Spring Boot Web应用程序。文章来源地址https://www.toymoban.com/news/detail-731920.html

到了这里,关于快速入门:使用 Spring Boot 构建 Web 应用程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring Boot】数据库持久层框架MyBatis — Spring Boot构建MyBatis应用程序

    Spring Boot是用于快速构建Spring应用程序的框架。MyBatis是一种Java持久化框架,可以帮助开发人员轻松地管理数据库。将Spring Boot与MyBatis结合使用可以使开发人员更容易地创建和管理数据库应用程序。 以下是使用Spring Boot构建MyBatis应用程序的步骤: 添加MyBatis依赖项:在项目的

    2024年02月10日
    浏览(56)
  • “深入理解Spring Boot:构建高效、可扩展的Java应用程序“

    标题:深入理解Spring Boot:构建高效、可扩展的Java应用程序 摘要:Spring Boot是一个用于构建Java应用程序的开源框架,它提供了一种简单且高效的方式来创建独立的、生产级别的应用程序。本文将深入探讨Spring Boot的核心概念和特性,并通过示例代码展示如何使用Spring Boot构建

    2024年02月15日
    浏览(62)
  • “深入了解Spring Boot:构建高效、可扩展的Java应用程序“

    标题:深入了解Spring Boot:构建高效、可扩展的Java应用程序 摘要:Spring Boot是一款快速构建Java应用程序的开发框架,它基于Spring框架,提供了一系列的自动化配置和约定,使得开发者能够更快速、更高效地构建出高质量的应用程序。本文将深入探讨Spring Boot的核心特性和使用

    2024年02月14日
    浏览(57)
  • Spring Boot实践:构建WebSocket实时通信应用程序并创建订阅端点

    作为一款流行的Java开发框架,Spring Boot可以轻松地集成WebSocket。WebSocket能够为Web应用程序提供实时通信功能,而Spring Boot的优秀特性使得它可以很容易地实现WebSocket的集成。在本篇文章中,我们将演示如何使用Spring Boot框架来构建一个简单的WebSocket应用程序。 1. 创建Spring Boo

    2024年02月01日
    浏览(64)
  • “深入理解Spring Boot:构建独立、可扩展的企业级应用程序的最佳实践“

    标题:深入理解Spring Boot:构建独立、可扩展的企业级应用程序的最佳实践 摘要:Spring Boot是一个强大的框架,可以帮助开发人员快速构建独立、可扩展的企业级应用程序。本文将深入探讨Spring Boot的核心概念和最佳实践,并通过示例代码演示其用法。 正文: 什么是Spring Bo

    2024年02月14日
    浏览(63)
  • [Java Web]element | 一个由饿了么公司开发的前端框架,让你快速构建现代化、美观的 Web 应用程序。

    ⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:@逐梦苍穹 ⭐所属专栏:Java Web ⭐如果觉得文章写的不错,欢迎点个关注一键三连😉有写的不好的地方也欢迎指正,一同进步😁 https://element.eleme.cn/#/zh-CN/component/installation   Element 是

    2024年02月05日
    浏览(97)
  • blog-engine-09-nuxt 构建快速、SEO友好和可扩展的Web应用程序变得轻松

    blog-engine-01-常见博客引擎 jekyll/hugo/Hexo/Pelican/Gatsby/VuePress/Nuxt.js/Middleman 对比 blog-engine-02-通过博客引擎 jekyll 构建 github pages 博客实战笔记 blog-engine-02-博客引擎jekyll-jekyll 博客引擎介绍 blog-engine-02-博客引擎jekyll-jekyll 如何在 windows 环境安装,官方文档 blog-engine-02-博客引擎jekyll

    2024年03月28日
    浏览(60)
  • 解释 RESTful API,以及如何使用它构建 web 应用程序。

    RESTful API是一种利用HTTP协议进行通信的Web API设计风格,它采用了一组统一且可缓存的操作,包括GET、POST、PUT、DELETE等,通过URL来定位资源,以及使用JSON、XML等格式来传输数据,以实现系统之间的数据交互和资源共享。 使用RESTful API构建Web应用程序,首先需要设计API的URL、

    2024年02月11日
    浏览(71)
  • 解释 RESTful API,以及如何使用它构建 web 应用程序

             RESTful API stands for Representational State Transfer Application Programming Interface. It is a set of principles and guidelines for building web services that provide data in a standard format, typically JSON or XML. RESTful API emphasizes on uniformity, scalability, reliability, performance, and flexibility. It operates on HTTP and follo

    2024年02月14日
    浏览(70)
  • 使用PostgreSQL构建强大的Web应用程序:最佳实践和建议

    PostgreSQL是一个功能强大的开源关系型数据库,它拥有广泛的用户群和活跃的开发社区。越来越多的Web应用选择PostgreSQL作为数据库 backend。如何充分利用PostgreSQL的特性来构建健壮、高性能的Web应用?本文将给出一些最佳实践和建议。 一、选择合适的PostgreSQL数据类型 PostgreSQL提供

    2024年02月12日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包