快速入门:使用 Spring Boot 构建 Web 应用程序
前言
本文将讨论以下主题:
- 安装 Java JDK、Gradle 或 Maven 和 Eclipse 或 IntelliJ IDEA
- 创建一个新的 Spring Boot 项目
- 运行 Spring Boot 应用程序
- 编写一个简单的 Web 应用程序
- 打包应用程序以用于生产环境
通过这些主题,您将能够开始使用 Spring Boot 并创建自己的 Web 应用程序。
文章目录
- 前言
- 介绍
- Spring Boot简介
- 为什么选择Spring Boot
- 准备工作
- 安装Java JDK
- 安装Gradle或Maven
- 安装Gradle
- 安装Maven
- 安装Eclipse或IntelliJ IDEA
- 安装Eclipse
- 安装IntelliJ IDEA
- 创建Spring Boot项目
- 使用 Maven 构建 Spring Boot 项目
- 分析项目结构
- 运行应用程序
- Whitelabel
- 使用 Gradle 构建 Spring Boot 项目
- 分析项目结构
- 运行应用程序
- 编写第一个Web应用程序
- 使用 Maven
- 使用 Gradle
- 打包成可执行jar包
- 实现热部署
- spring-boot-devtools
- Maven的常用命令:
- 总结
介绍
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

你可以根据大多数教程先配置JAVA_HOME,然后再去系统变量path中添加%JAVA_HOME%\bin

也可以直接添加bin完整目录

查看版本
java -version
安装Gradle或Maven
接下来需要安装Gradle或Maven。Gradle是一种基于Groovy语言的构建工具,而Maven是一种基于XML的构建工具。两者都可以用于管理项目依赖项和构建过程,这里介绍其中一种。
安装Gradle
Gradle是一个构建工具,面向开发者的脚本语言是Groovy和Kotlin这里不做过多介绍
- 下载Gradle二进制文件:访问Gradle官网,下载最新的Gradle二进制文件。
- 解压缩Gradle二进制文件:将下载的Gradle二进制文件解压缩到任意目录中。
- 配置环境变量:将Gradle的
bin目录添加到系统的环境变量PATH中,确保可以在命令行中使用Gradle。 - 通过
gradle -v来查看版本。
安装Maven
- 下载Maven二进制文件:访问Maven官网,下载最新的Maven二进制文件。
- 解压缩Maven二进制文件:将下载的Maven二进制文件解压缩到任意目录中。
- 配置环境变量:将Maven的
bin目录添加到系统的环境变量PATH中,确保可以在命令行中使用Maven。 - 通过
mvn -v来查看版本。
安装Eclipse或IntelliJ IDEA
最后需要安装一个集成开发环境(IDE),如Eclipse或IntelliJ IDEA。
安装Eclipse
- 下载Eclipse:访问Eclipse官网,下载最新的Eclipse IDE for Java Developers。
- 解压缩Eclipse:将下载的Eclipse压缩包解压缩到任意目录中。
- 启动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创建一个新项目。
- 打开Spring Initializr网站
- 选择“Project”页面,选择构建工具和Spring Boot版本
- 选择“Dependencies”页面,添加所需依赖项
- 点击“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 项目

分析项目结构
使用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配置

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

因为应用程序没有正确处理Web请求而导致了Whitelabel错误。按照以下步骤可以解决该问题:
-
确认
404页面是Spring Boot的默认错误页面,表示我们的请求在Web服务中不存在。 -
创建一个新的控制器类,并添加相应的方法来处理Web请求。例如,在您的项目中创建一个名为
HelloController的类,实现以下功能:- 响应/hello请求。
- 返回“hello, springboot”。
-
修改
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")@ResponseBodypublic String hello() {return "hello, springboot";}}

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

使用 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 package和mvn clean package都是Maven命令,用于构建项目并生成可执行的JAR或WAR文件。
mvn package会执行以下步骤:
- 编译源代码
- 运行单元测试
- 打包编译后的代码到JAR或WAR文件中
而mvn clean package则会在执行以上步骤之前先执行清理操作,即删除已经生成的目标文件夹以及其他编译产生的临时文件。然后再执行上述步骤。
因此,mvn clean package比mvn 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中启动应用程序并进行调试时,任何更改都会自动重新加载应用程序。
你需要先打开自动构建项目


Debug模式
启动后,
即可自动检测代码更改并重新加载应用程序

Maven的常用命令:
-
mvn dependency:purge-local-repository:该命令将从本地存储库中删除所有已解析的依赖项和插件。这对于解决依赖项版本冲突或清理本地存储库非常有用。 -
mvn dependency:tree:该命令将以树形结构显示项目依赖项及其传递依赖项。这对于检查依赖项版本、冲突或排除不需要的依赖项非常有用。 -
mvn dependency:list:该命令将列出当前项目的所有依赖项。它与mvn dependency:tree不同之处在于,它只列出直接依赖项而不显示传递依赖项。 -
mvn dependency:resolve:该命令将解析并下载所有项目依赖项,但不会将它们复制到本地存储库中。 -
mvn dependency:analyze:该命令将分析项目依赖项并生成报告,其中包含未使用的依赖项和可能产生潜在问题的依赖项。
这些命令可以帮助你管理项目依赖项,解决依赖项相关问题,并确保项目的稳定性和可靠性。
总结
通过本文,您已经了解了如何使用Spring Boot创建Web应用程序。我们首先讨论了Spring Boot的基础知识,然后介绍了如何设置您的开发环境。接下来,我们演示了如何使用Maven和Gradle构建Spring Boot项目,并分析了项目的结构。最后,我们编写了一个简单的Web应用程序,并演示了如何打包成可执行jar包和实现热部署。
我们希望本文对您有所帮助,使您能够以更快、更轻松的方式创建优秀的Spring Boot Web应用程序。
相关文章:
快速入门:使用 Spring Boot 构建 Web 应用程序
前言 本文将讨论以下主题: 安装 Java JDK、Gradle 或 Maven 和 Eclipse 或 IntelliJ IDEA创建一个新的 Spring Boot 项目运行 Spring Boot 应用程序编写一个简单的 Web 应用程序打包应用程序以用于生产环境 通过这些主题,您将能够开始使用 Spring Boo…...
01.CentOS7静默安装oracle11g
CentOS7静默安装oracle11g 一、下载Oracle11g安装包二、开始安装oracle11g三、配置Oracle监听程序四、添加数据库实例五、设置开机启动六、登录后解除锁定 一、下载Oracle11g安装包 下载链接:https://pan.baidu.com/s/1gcLMFGX7-8ju7OoFOFLzQA 提取码:6…...
SASE安全访问服务边缘
自存用: 参考文档: 什么是安全访问服务边缘 (SASE)? | Microsoft 安全 网安人必读 |一文读懂SASE - 知乎...
k8s集群升级
目录 1. 部署cri-docker (所有集群节点) 2. 升级master节点 3. 升级worker节点 4. 部署containerd 1. 部署cri-docker (所有集群节点) k8s从1.24版本开始移除了dockershim,所以需要安装cri-docker插件才能使用docker …...
redis原理 主从同步和哨兵集群
主从库如何实现数据一致 我们总说的 Redis 具有高可靠性,又是什么意思呢?其实,这里有两层含义:一是数据尽量少丢失,二是服务尽量少中断。AOF 和 RDB 保证了前者,而对于后者,Redis 的做法就是增…...
四季古诗赏析
春晓 春眠不觉晓,处处闻啼鸟。夜来风雨声,花落知多少。 夏意 别院深深夏簟清,石榴开遍透帘明。树阴满地日当午,梦觉流莺时一声。 秋词 自古逢秋悲寂寥,我言秋日胜春朝。晴空一鹤排云上,便引诗情到碧霄。 …...
【网络协议】聊聊套接字socket
网络编程我们知道是通过socket进行编程的,其实socket也是基于TCP和UDP协议进行编程的。但是在socket层面是感知不到下层的,所以在设置参数的时候,其实是端到端协议智商的网络层和传输层。TCP是数据流所以设置为SOCK_STREAM,而UDP是…...
GEO生信数据挖掘(十一)STRING数据库PPI蛋白互作网络 Cytoscape个性化绘图【SCI 指日可待】
GEO生信数据挖掘(十)肺结核数据-差异分析-WGCNA分析(900行代码整理注释更新版本) 通过 前面十篇文章的学习,我们应该已经可以获取到一个”心仪的基因列表“了,相较于原始基因数量,这个列表的数…...
api接口更新钉钉文档
class OperateKnowledgeBaseExcel():robot_code # agent_id #app_key #群机器人app_secret #群机器人def __init__(self,union_id, workbook_id, worksheet_id):self.union_id union_idself.workbook_id workbook_id # 获取方式:... &g…...
Android---如何同view进行渲染
ViewRootImpl 在 Activity、window 和 View 三者关系之间起着承上启下的作用。一方面,ViewRootImpl 中通过 Binder 通信机制,远程调用 WindowSession 将 View 添加到 Window 中;另一方面,ViewRootImpl 在添加 View 之前࿰…...
【LeetCode:26. 删除有序数组中的重复项 | 双指针】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...
如何判断一个对象是不是一个空对象?
在JavaScript中,可以使用以下方法来判断一个对象是否为空对象: 1:使用Object.keys()方法:Object.keys()方法返回一个包含对象自身可枚举属性的数组。通过判断该数组的长度,可以确定对象是否为空对象。 function isEm…...
C/C++ “variable set but not used“的 警告问题解决方案
在编程的过程中,会有一些预留的变量暂时不用,但是编译过程编译器警告 会报错无法编译通过针对这个问题,采用下面的解决方案比较方便。 错误如下形式: 三种解决方法: 1.可以在变量前加上(void)就…...
JAVA安全入门之反射
反射 对于反射这个概念来说,直白的讲就是: 对象可以通过反射获取他的类,类可以通过反射拿到所有⽅法(包括私有),拿到的⽅法可以调⽤而众所周知 JAVA 是一门静态语言,我们通过反射就可以达到动…...
【c++|opencv】一、基础操作---2.图像信息获取
every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 图像信息获取,roi 1. 图像信息获取 // 获取图像信息#include <iostream> #include <opencv2/opencv.hpp>using namespace cv; …...
HarmonyOS开发:探索组件化模式开发
前言 组件化一直是移动端比较流行的开发方式,有着编译运行快,业务逻辑分明,任务划分清晰等优点,针对Android端的组件化,之前有比较系统的总结过相关文章,感兴趣的朋友,可以查看,点击…...
目标URL启用了不安全的HTTP方法
修复中危web项目漏洞(目标URL启用了不安全的HTTP方法) 漏洞名 :目标URL启用了不安全的HTTP方法 等级: 中危 漏洞位置: PUT DELETE 描述: Web服务器配置为允许使用危险的HTTP方法,如PUT、MOVE、…...
大数据之LibrA数据库系统告警处理(ALM-12001 审计日志转储失败)
告警解释 根据本地历史数据备份策略,集群的审计日志需要转储到第三方服务器上。如果转储服务器满足配置条件,审计日志可以成功转储。审计日志转储失败,系统产生此告警。如果第三方服务器的转储目录磁盘空间不足,或者用户修改了转…...
大模型该被知道的技术实现-面向垂直领域
一个高度清晰的思维导图截图奉上(下载:需3积分) 内容截图...
赛灵思产品系列
FPGA概述: FPGA的性能主要划分为以下几个方面: 1. 逻辑单元数量:逻辑单元数量越多,FPGA的处理能力越强。 2. 存储单元数量:存储单元数量越多,FPGA的存储能力越强。 3. 时钟频率:时钟频率越高&a…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践,很多人以为AI已经强大到不需要程序员了,其实不是,AI更加需要程序员,普通人…...
