目录
一. 概述
二. Spring Boot Web
1.2.1 创建SpringBoot工程(需要联网)
1.2.2 定义请求处理类
1.2.3 运行测试
1.3 Web分析
三. Http协议
3.1 HTTP-概述
刚才提到HTTP协议是规定了请求和响应数据的格式,那具体的格式是什么呢?
3.2 HTTP-请求协议
一. GET方式的请求协议:
二. POST方式的请求协议:
3.3 HTTP-响应协议
响应状态码:
3.4 HTTP-协议解析
3. Web服务器-Tomcat
3.1 Tomcat简介
3.2 Tomcat服务器的基本使用
3.3 入门程序解析
3.3.1 Spring官方骨架
3.3.2 起步依赖
3.3.3 内嵌Tomcat
Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每一个子项目都能够完成特定的功能来解决特定领域的问题,而我们在开发一个项目的时候,会遇到各种各样的业务场景,那我们会根据业务开发的需要取选择对应的技术,从而简化以及解决对应的业务难题。
而在现在的企业开发当中,开发人员更喜欢偏向于在项目当中选择Spring家族提供的这一系列的解决方案,为什么呢?
因为这些框架它都属于Spring体系内的框架,框架之间的整合会非常的容易,甚至可以说是无缝衔接,所以这是当前企业开发当中非常流行,也是非常受欢迎的一种解决方案,被我们亲切的称为Spring全家桶,而Spring家族开发的这么多子项目,其实它都是基于一个基础框架的,也就是这个Spring Framework,即Spring框架
基于Spring Boot就可以快速的来开发一个Spring的应用程序,在SpringBoot的介绍中也看到了,“尽可能快的来构建一个Spring应用”,所以这个Spring Boot它只是简化了Spring应用的配置,它的底层还是Spring,它只是简化了Spring的开发而已。
Spring家族旗下这么多的技术,最基础、最核心的是 SpringFramework。其他的spring家族的技术,都是基于SpringFramework的,SpringFramework中提供很多实用功能,如:依赖注入、事务管理、web开发支持、数据访问、消息服务等等。
1. SpringBootWeb快速入门
1.1 需求
1.2 开发步骤
第1步:创建SpringBoot工程项目
第2步:定义HelloController类,添加方法hello,并添加注解
第3步:测试运行
Group组织名就是域名倒写 Artifact:模块名 Package name:包名 Artifact / 工件:模块名
Location:代表的就是我当前所创建出来的Spring Boot工程,最终放在哪个磁盘目录下呢?
pom.xml配置文件信息
目录信息:
直接在com.gch下右键新建Java类直接新建:controller.HelloController,连包带类一起创建
package com.gch.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** 请求处理类 */ @RestController // 该注解用来标识当前类就是Spring当中的一个请求处理类而不是普通类 public class HelloController { /** * 请求处理方法 * @return:该方法的返回值就是我们要返回给浏览器的数据 * @RequestMapping注解是建立url路径跟我们这个方法之间的对应关系的 * 当我们的程序运行起来之后,它会自动的占用一个端口号8080,所以我们要想访问当前这个服务端的程序,将来要访问的端口号就是8080 * 协议://主机[:端口][/路径] * http://localhost:8080/hello * @RequestMapping里面指定的value值就是它要处理的请求路径是什么 */ @RequestMapping("/hello") // 指定它要处理的请求路径,这个指的是浏览器将来请求/hello这个地址呢,最终就会调用这个方法 public String hello(){ System.out.println("Hello World~"); return "Hello World"; } }
package com.gch; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * 自动创建的这个类在SpringBoot当中我们称之为启动类 * 简单说这个类就是用来启动SpringBoot工程的 * 由于这个类的写法也是非常固定的,因此在创建SpringBoot工程的时候这个类已经给我们自动创建好了 */ @SpringBootApplication public class SpringbootWebQuickstartApplication { public static void main(String[] args) { SpringApplication.run(SpringbootWebQuickstartApplication.class, args); } }
运行结果:
浏览器:
输入网址:http://192.168.100.11:8080/hello
通过IP地址192.168.100.11定位到网络上的一台计算机
我们之前在浏览器中输入的localhost,就是127.0.0.1(本机)
通过端口号8080找到计算机上运行的程序
localhost:8080 , 意思是在本地计算机中找到正在运行的8080端口的程序
/hello是请求资源位置
资源:对计算机而言资源就是数据
web资源:通过网络可以访问到的资源(通常是指存放在服务器上的数据)
localhost:8080/hello ,意思是向本地计算机中的8080端口程序,获取资源位置是/hello的数据
8080端口程序,在服务器找/hello位置的资源数据,发给浏览器
服务器:(可以理解为ServerSocket)
接收到浏览器发送的信息(如:/hello)
在服务器上找到/hello的资源
把资源发送给浏览器
我们在JavaSE阶段学习网络编程时,有讲过网络三要素:
IP :网络中计算机的唯一标识
端口 :计算机中运行程序的唯一标识
协议 :网络中计算机之间交互的规则
问题:浏览器和服务器两端进行数据交互,使用什么协议?
答案:http协议
打开浏览器,输入 http://localhost:8080/hello
在入门程序中,我们在浏览器发起了一个请求,请求路径是localhost:8080/hello,回车之后,我们就访问到了服务器端的web应用程序,并且,也拿到了服务器端返回回来的数据:Hello World~。
那其实呢,我们在浏览器地址栏输入这个地址之后,浏览器默认会自动的在请求路径前面加上一个协议:http://,这个我们就称之为HTTP协议。
HTTP:Hyper Text Transfer Protocol(超文本传输协议),规定了浏览器与服务器之间数据传输 的规则。
2.1.1 介绍
什么是数据传输的规则:
说白了就是客户端浏览器与服务器之间进行数据交互的数据格式
浏览器向服务器进行请求时:
所以,我们学习HTTP主要就是学习请求和响应数据的具体格式内容。
3.2 特点
我们刚才初步认识了HTTP协议,那么我们在看看HTTP协议有哪些特点:
- TCP是一种面向连接的(建立连接之前是需要经过三次握手)、可靠的、基于字节流的传输层通信协议,在数据传输方面更安全
- TCP它是一种面向连接的安全的协议,也就是说,每一次请求之前,要先进行三次握手,连接完了之后确定双方都有收发能力了,我再来传输数据,这样呢不容易丢数据包,更加安全。
请求和响应是一一对应关系,如果没有请求,也就没有响应
所谓无状态指的是每一次请求响应都是独立的,后一次请求是不会记录前一次请求数据的。 无状态指的是客户端浏览器发送 HTTP 请求给服务端之后,服务端根据请求响应数据,响应完后,不会记录任何信息。
- 缺点: 多次请求间不能共享数据(多次请求间不能进行数据的共享)
- 优点: 速度快
正是因为多次请求之间不会进行数据共享,后一次请求不会记录前一次请求的数据,这也就意味着它的速度会更快一些,而多次请求之间不能共享数据,那也就意味着有很多的功能,HTTP协议就实现不了。
就比如我这里有一个后台管理系统,在这个后台管理系统的业务需求当中就要求,必须用户登录之后才可以访问系统当中的数据,当我点击登录按钮执行登陆操作的时候,有一次请求响应,登陆完成之后进入系统,这一次请求响应结束,接下来我再来访问课程管理的数据,而当我点击课程管理的时候,它就要去访问课程的数据,而在访问课程数据的时候,我是需要知道这个用户到底有没有登录的,如果登录成功,我再给它返回课程的数据,如果没有登录成功,是不允许访问课程的数据,由于登录请求和访问课程管理数据的这个请求是两次不同的请求,而HTTP协议它又是无状态的,在两次请求之间,它是没办法共享数据的,那这也就造成了这一次课程管理的请求,它并不知道上一次用户是否登录成功了,那这就出现问题了。解决方案:web会话技术。
请求之间无法共享数据会引发的问题:
- 如:京东购物。加入购物车和去购物车结算是两次请求
- 由于HTTP协议的无状态特性,加入购物车请求响应结束后,并未记录加入购物车是何 商品
- 发起去购物车结算的请求后,因为无法获取哪些商品加入了购物车,会导致此次请求无 法正确展示数据 具体使用的时候,我们发现京东是可以正常展示数据的,原因是 Java 早已考虑到这个问题, 并提出了使用会话技术 (Cookie 、 Session) 来解决这个问题。
重点:请求数据的格式和响应数据的格式
浏览器和服务器是按照HTTP协议进行数据通信的。
HTTP协议又分为:请求协议和响应协议
请求协议:浏览器将数据以请求格式发送到服务器
包括:请求行、请求头 、请求体
响应协议:服务器将数据以响应格式返回给浏览器
包括:响应行 、响应头 、响应体
在HTTP1.1版本中,浏览器访问服务器的几种方式:
请求方式 | 请求说明 |
---|---|
GET | 查询操作。获取资源。 向特定的资源发出请求{用于请求特定的资源}。例:百度安全验证 |
POST | 新增资源的操作。传输实体主体。 向指定资源提交数据进行处理请求(例:上传文件、提交表单数据),数据被包含在请求体中。 |
OPTIONS | 返回服务器针对特定资源所支持的HTTP请求方式。 因为并不是所有的服务器都支持规定的方法,为了安全有些服务器可能会禁止掉一些方法,例如:DELETE、PUT等。那么OPTIONS就是用来询问服务器支持的方法。 |
HEAD | 服务器只返回响应头的头信息,如:HTTP状态码、响应头字段、资源的大小、最后的修改时间等。获得报文首部。 HEAD方法类似GET方法,但是不同的是HEAD方法不要求返回数据,响应中没有实际的响应体,只包含了响应头部信息。通常用于确认URL的有效性及资源更新时间等。 |
PUT | 修改操作。传输文件。 PUT方法用来传输文件。类似FTP协议,文件内容包含在请求报文的实体中,然后请求保存到URL指定的服务器位置。 |
DELETE | 删除操作。删除文件。 请求服务器删除Request-URI所标识的资源 |
TRACE | 追踪路径。 回显服务器收到的请求,主要用于测试或诊断 |
CONNECT | 要求用隧道协议连接代理。 HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 |
在我们实际应用中常用的也就是 :GET、POST
- 请求协议指的就是请求数据的格式
- 那这个请求数据的格式,我们刚才已经看到了,就是一些文本字符串
- 请求数据的格式分为三个部分:请求行、请求头、请求体
- 首先请求数据格式的第一个部分:请求行,请求行指的是请求数据格式的第一行,而这个请求行它又是由三个部分组成的(请求方式、资源路径、协议/版本):
- 第一个部分就是这个GET,POST,这是第一部分,那这个指的是请求方式。这个请求方式,之前在讲解HTML的form表单的时候说过,这个表单的方式有两种,一种是GET,一种是POST,那其实GET和POST就是HTTP的请求方式,当然HTTP的请求方式有很多,我们这里先知道GET和POST就可以了。
- /请求路径?请求参数 请求路径和请求参数之间使用?连接
- 请求参数格式:参数名=参数值&参数名=参数值
- 请求方式之后,有一个空格,空格后面就是第二个部分的内容:/brand/findAll请求路径后面跟上的是请求的参数,那这个部分指的是请求的资源路径。
- 那资源路径之后,又有一个空格,空格之后就是第三个部分:HTTP/1.1,这个代表的是协议以及协议的版本。
- 以上就是请求数据格式的第一部分请求行的格式。
2. 请求数据格式的第二个部分:请求头(第二行开始,格式:key=value)
- 请求头指的就是从第二行开始,一直到后面的这一部分数据,请求头的格式是key:value形式的键值对。
- 前面的这个部分指的是请求头的名字,后面这部分指的是请求头对应的值,中间使用:进行分隔。
- http是个无状态的协议,所以在请求头设置浏览器的一些自身信息和想要响应的形式。这样服务器在收到信息后,就可以知道是谁,想干什么了
- 在请求头当中携带了很多的信息,包括浏览器的版本,请求的主机地址,请求的数据格式等等。
- 接下来,介绍一下常见的请求头它所代表的含义:
- Host:localhost:8080,代表的是我们要请求的是当前本机的8080端口的服务。
- User-Agent:代表的是浏览器的版本,也就是说客户端浏览器它得告诉服务器端,我当前请求用的是哪一个浏览器,我的版本是什么。
- 那告诉服务器端这个浏览器版本有什么用呢?
- 这个地方一般会用于浏览器的兼容性处理。
- 因为市面上有很多的浏览器,而不同的浏览器它们的内核是有差异的,这就造成了同一段程序在不同的浏览器解析出来,它的效果是不一样的,这个呢,我们称之为浏览器的兼容性问题。
- 那我们在服务器端,如果拿到了客户端浏览器的版本,我就可以有针对性的进行处理,从而保证不论你采用什么样的浏览器,你最终访问到的效果都是一样的,那这就是解决浏览器的兼容性问题。
- 而解决浏览器的兼容性问题,最核心的就是我们在服务器端得拿到浏览器的版本。
- Accept:text/*:表示我浏览器期望接收的是一个文本;image/*:表示我浏览器期望接收的是一个图片
- Accept-Language:zh-CN,比如我这里传递了一个zh-CN,这就相当于我浏览器告诉服务器端,我浏览器期望接收到的是简体中文的语言。
- Accept-Encoding:gzip,代表我浏览器可以接收gzip的压缩格式
- Content-Type:application/json,就代表请求体的格式,它是一个json格式的数据。
- Content-Length:161,就代表这个请求体的大小是161个字节。
3. 请求数据格式的第三个部分:请求体(POST请求,存放请求参数)
- 请求体是POST请求特有的一个组成部分,POST请求最后一个部分就是请求体,它是用来存放请求参数的。
- 在这个请求头和请求体之间是有一个空行存在的,通过一个空行将这两部分分离开来- - (作用:用于标记请求头结束)。
- 而在POST请求里面,它就把请求参数放在了请求体这个位置,那之前我们在讲解HTML的form表单的时候,我们就介绍过,GET请求和POST请求的区别,在这里我们再来回顾一下:
- 在GET请求当中,请求参数是在请求行当中的,具体的表现形式,就是在请求路径之后跟上?key=value,如果有多个参数,后面再跟上&key=value的形式。而GET请求它是没有请求体的,并且它的请求大小是有限制的。
- 而如果是POST请求,它的请求参数是携带在请求体当中,它的请求大小没有限制。
请求行 :HTTP请求中的第一行数据。由:请求方式、URL资源路径、协议/版本组成(之间使用空格分隔)
请求方式:GET
资源路径:/brand/findAll?name=OPPO&status=1
请求路径:/brand/findAll
请求参数:name=OPPO&status=1
请求参数是以key=value形式出现
多个请求参数之间使用&连接
请求路径和请求参数之间使用?连接
协议/版本:HTTP/1.1
请求头 :第二行开始,上图黄色部分内容就是请求头。格式为key: value形式
常见的HTTP请求头有:
- Host: 表示请求的主机名
- User-Agent: 浏览器版本。 例如:Chrome浏览器的标识类似Mozilla/5.0 ...Chrome/79 ,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...)like Gecko
- Accept:表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有;
- Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;
- Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等。
- Content-Type:请求主体的数据类型
- Content-Length:数据主体的大小(单位:字节)
http是个无状态的协议,所以在请求头设置浏览器的一些自身信息和想要响应的形式。这样服务器在收到信息后,就可以知道是谁,想干什么了
举例说明:服务器端可以根据请求头中的内容来获取客户端浏览器的相关信息,有了这些信息服务器端就可以处理不同的业务需求。
比如:
不同浏览器解析HTML和CSS标签的结果会有不一致,所以就会导致相同的代码在不同的浏览器会出现不同的效果
服务器端根据客户端请求头中的数据获取到客户端的浏览器类型,就可以根据不同的浏览器设置不同的代码来达到一致的效果(这就是我们常说的浏览器兼容问题)
请求体 :存储请求参数
GET请求的请求参数在请求行中,故不需要设置请求体
请求行(以上图中红色部分):包含请求方式、资源路径、协议/版本
请求方式:POST
资源路径:/brand
协议/版本:HTTP/1.1
请求头(以上图中黄色部分)
请求体(以上图中绿色部分) :存储请求参数
请求头和请求体之间是有一个空行隔开(作用:用于标记请求头结束)
区别方式 | GET请求 | POST请求 |
---|---|---|
请求参数 | 请求参数在请求行中。 例:/brand/findAll?name=OPPO&status=1 | 请求参数在请求体中 |
请求参数长度 | 请求参数长度有限制(GET 请求传输的数据受到 URL 长度的限制, 而 URL 长度是由浏览器决定的,浏览器不同限制也不同),通常不超过2048个字符,也就是传送的数据量不超过2KB | 请求参数长度没有限制 |
安全性 | 安全性低。原因:请求参数暴露在浏览器地址栏中。请求的数据会附加在URL之后,以?分隔URL和传输数据,多个参数用&连接 | 安全性相对高 |
演示:GET请求与POST请求
点击IDEA的悬浮工具条,然后选择一个浏览器打开
GET方式提交:
POST方式提交:
3.1 格式介绍
协议/版本:HTTP/1.1
第一个部分就是HTTP/1.1,这个代表的是就是协议以及协议的版本
响应状态码:200
第一部分之后有一个空格,空格之后是第二部分是一个数字,这个数字就代表了响应的状态码,这个状态码指的就是服务器端要告诉客户端这次响应到底是怎么样的状态,是成功还是失败。这里所出现的200代表的是成功。
状态码描述:OK
第二个部分之后又有一个空格,空格之后是第三个部分,它是一个英文,这个英文就是用来描述前面的状态码的。这里的OK就代表成功了。
其实这个状态码有很多,而我们一般会将其分为五类,分别从100多一直到500多。
2. 响应头(以上图中黄色部分):响应数据的第二行开始。格式为key:value形式。
3. 响应体(以上图中绿色部分): 响应数据的最后一部分。存储响应的数据
- 状态码是HTTP协议中,服务端向客户端返回的响应状态码,用于表示服务器对请求的处理结果。
- HTTP状态码分为5类,分别是1xx、2xx、3xx、4xx、5xx。
- 状态码由三位数字组成,第一位数字表示响应的类型,例如1xx表示信息性状态码,表示信息响应,表示请求已经被接收,继续处理、2xx表示成功状态码,表示成功响应,请求已经被成功处理、3xx表示重定向状态码,表示重定向响应,需要进一步操作已完成请求、4xx表示客户端错误响应,表示请求有语法错误或请求无法被执行、5xx表示服务器错误响应,表示u服务器在处理请求时发生了错误...
- 常见的状态码包括200 OK、404 Not Found、500 Internal Server Error...
- 状态码可以帮助客户端了解服务器对请求的处理结果,从而进行相应的处理和调整。
100多代表的是响应中,它是一个临时状态码。
200多这个状态码代表的是成功。
第三类是300多,300多代表的是重定向的状态码。
接下来的这两类状态码400多和500多比较常见也比较重要,它们都代表的是错误的情况。
400多代表的是客户端错误。
最后一类500多指的是服务器错误。
常见的响应状态码:
状态码 | 英文描述 | 解释 |
---|---|---|
200 | OK | 客户端请求成功,即处理成功,这是我们最想看到的状态码 |
302 | Found | 指示所请求的资源已移动到由Location响应头给定的 URL,浏览器会自动重新访问到这个页面 |
304 | Not Modified | 告诉客户端,你请求的资源至上次取得后,服务端并未更改,你直接用你本地缓存吧。隐式重定向 |
400 | Bad Request | 客户端请求有语法错误,不能被服务器所理解 |
403 | Forbidden | 服务器收到请求,但是拒绝提供服务,比如:没有权限访问相关资源 |
404 | Not Found | 请求资源不存在,一般是URL输入有误,或者网站资源被删除了 |
405 | Method Not Allowed | 请求方式有误,比如应该用GET请求方式的资源,用了POST |
428 | Precondition Required | 服务器要求有条件的请求,告诉客户端要想访问该资源,必须携带特定的请求头 |
429 | Too Many Requests | 指示用户在给定时间内发送了太多请求(“限速”),配合 Retry-After(多长时间后可以请求)响应头一起使用 |
431 | Request Header Fields Too Large | 请求头太大,服务器不愿意处理请求,因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交。 |
500 | Internal Server Error | 服务器发生不可预期的错误。服务器出异常了,赶紧看日志去吧 |
503 | Service Unavailable | 服务器尚未准备好处理请求,服务器刚刚启动,还未初始化好 |
502 Bad Gateway Nginx报错一般都是502,代表网关出问题了!
504 网关超时:网关未收到上游服务器或应用程序的及时响应!
常见的HTTP响应头有:
小结:
1. Web服务器
- Web服务器本质上就是一个软件程序,就是对HTTP协议进行了封装,使程序员不必直接对HTTP协议进行操作,因为毕竟是比较繁琐的,也就是说,如果有了这些Web服务器,HTTP协议的解析和处理的代码,我们都不用去做了,开发人员只需要关注我们当前项目的业务实现逻辑就可以了,这样使得Web程序的开发更加简单,更加便捷,也更加高效。
- Web服务器可以用来部署我们开发好的Web项目,对外提供网上信息浏览服务。
2. Tomcat
- Tomcat是一个轻量级的Web服务器,支持Servlet以及JSP等少量的JavaEE规范。
- 所以Tomcat也被称为Web容器或者Servelet容器。
基本使用就包括Tomcat的下载,安装,卸载,启动,访问,部署等一系列的操作。
1. 下载
Tomcat软件类型说明:
- tar.gz文件,是linux和mac操作系统下的压缩版本
- zip文件,是window操作系统下压缩版本(我们选择zip文件)
2. 安装与卸载
安装: Tomcat是绿色版,直接解压即安装
打开apache-tomcat-9.0.27目录就能看到如下目录结构,每个目录中包含的内容需要认识下
bin:目录下有两类文件,一种是以".bat"结尾的,是Windows系统的可执行文件,一种是 以".sh"结尾的,是Linux系统的可执行文件。
卸载:卸载比较简单,可以直接删除目录即可
3. 启动与关闭
启动:
启动Tomcat只需要访问bin目录下的一个脚本文件startup.bat,直接双击该脚本就可以将Tomcat启动起来。
注意: tomcat服务器启动后,黑窗口不会关闭,只要黑窗口不关闭,就证明tomcat服务器正在运行
关闭: 关闭有三种方式
1、强制关闭:直接×掉Tomcat运行窗口(不建议)
2、正常关闭:bin\shutdown.bat
3、正常关闭:在Tomcat启动窗口中按下 Ctrl+C
说明:如果按下Ctrl+C没有反映,可以多按几次
4. 常见问题
问题1:Tomcat启动时,窗口一闪而过
检查JAVA_HOME环境变量是否正确配置
问题2:端口号冲突
解决方案:换Tomcat端口号
要想修改Tomcat启动的端口号,需要修改 conf/server.xml文件
注: HTTP协议默认端口号为80,如果将Tomcat端口号改为80,则将来访问Tomcat时,将不 用输入端口号。
Tomcat 部署项目: 将项目放置到 webapps 目录下, 即部署完成
演示所部署的应用:
基于本次的核心技术点SpringBoot快速入门案例进行分析。
Spring Initializrhttps://start.spring.io/
Spring官方生成的SpringBoot项目,怎么使用呢?
解压缩后,就会得到一个SpringBoot项目工程
结论:不论使用IDEA创建SpringBoot项目,还是直接在官方网站利用骨架生成SpringBoot项 目,项目的结构和pom.xml文件中内容是相似的。
起步依赖有什么特殊之处呢,这里我们以入门案例中引入的起步依赖做为讲解:
spring-boot-starter-web:包含了web应用开发所需要的常见依赖
spring-boot-starter-test:包含了单元测试所需要的常见依赖
Spring Boot Reference Documentationhttps://docs.spring.io/spring-boot/docs/2.7.2/reference/htmlsingle/#web
3.3.2 SpringBoot父工程
为什么没有指定
- 因为每一个SpringBoot工程 / 项目,都有一个统一的父工程,也就是上面所配置的这个parent,这个parent它是Spring Boot的父工程,所有的Spring Boot工程都需要继承自这样的一个父工程,而在Spring Boot工程当中,这些起步依赖的版本都在这个父工程当中已经进行了统一管理。
- 父工程指定了版本号后,就会自动的引入和所指定版本对应的起步依赖。
- 依赖的版本号,在父工程中进行统一管理。
- 比如你选择了Spring Boot的版本是2.7.4,并且已经配置好了这个父工程,那Spring Boot就会自动的给你引入与这个2.7.4版本对应的起步依赖。
我们可以通过IDEA开发工具右侧的maven面板中,就可以看到当前工程引入的依赖。其中已经将Tomcat的相关依赖传递下来了,也就是说在SpringBoot中可以直接使用Tomcat服务器。