1.Maven
Maven是⼀个项目管理工具。基于POM(Project Object Model,项目对象模型) 的概念,Maven可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
即Maven是⼀个项目管理工具,通过 pom.xml 文件的配置获取 jar包,而不用手动去添加 jar 包。
Maven提供的功能非常多,主要体现在以下的两个方面:
- 项目构建
- 管理依赖
1.1 创建一个Maven项目
IDEA本身已经集成了Maven,我们可以直接使用,无需安装。

1.2 项目构建
Maven 提供了标准的,跨平台(Linux,Windows,MacOS等)的自动化项目构建方式
当我们开发了⼀个项目之后,代码需要经过编译,测试,打包,发布等流程,每次代码的修改,都需要经过这些流程,如果代码反复调试修改,这个流程就需要反复进行,就显得特别麻烦,而 Maven 给我们提供了一套简单的命令来完成项目的构建。
如以下图中,是 Maven 的命令:

比如,双击 package,就可以完成项目的打包操作,打包就是把所有的 class文件,全部放在一起,打成jar 包 或者 war包 :


jar包 和 war包 都是⼀种压缩文件。
- jar包就是把开发人员已经写好的⼀些代码进行打包,打好的 jar 包就可以引入到其他项目中,也可以直接使用这些 jar 包中的类和属性。另外也可以打成可执行 jar包,这样的包就可以通过 java -jar xxx.jar命令来执行。
- war 包可以理解为是⼀个web项目,里面是项目的所有东西,通常用于网站。
1.3 依赖管理
上面说到,Maven是⼀个项目管理工具,通过 pom.xml 文件的配置获取 jar 包,而不用手动去添加jar 包。
而获取的 jar包 ,其实就是依赖。
- pom.xml 就是maven 的配置文件,用以描述项目的各种信息
依赖配置:
依赖:指当前项目运行所需要的 jar包。
如果是手动配置,通过以下的操作引入依赖:
File → Project Structure → Libraries → 点击 + → 选择 Java → 选择本地 JAR 文件,就能把外部类库引入项目使用。

例如,JDBC 需要引入 / 下载 mysql-connector-java 的包,并且添加到项目中,如果使用Maven,我们只需要在 pom.xml 中引入 mysql-connector-java 的依赖就可以了:
①在pom文件 <dependencies> 标签内,添加依赖坐标:

- <groupId> 标签表示 组织ID
- <artifactId> 标签表示 项目ID
- <version> 标签表示 版本
②点击刷新按钮,引入新加入的依赖 jar包:
(后续有添加新的jar包,或者修改jar包版本,都需要通过该方式在项目中添加依赖)
右上角的刷新按钮:

或者:

③刷新完之后,就可以在项目中看到新加入的jar包:

1.4 依赖传递
早期我们没有使用 maven 时,向项目中添加依赖的 jar包,需要把所有的 jar包都复制到项目工程下。比如 A 依赖B,B依赖C,那么 A项目引入 B 的同时,也需要引⼊C,如果我们手动管理这个依赖,这个过程就会比较麻烦,我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的。
但使用 maven 的话,就可以避免管理所需依赖的关系。我们只需要在pom文件中,定义直接依赖就可以了,由于 maven 的依赖具有传递性,所以会自动把所依赖的其他 jar 包也⼀起导入。

如上图,项目A 通过 Maven 引入 Jar A 时,会自动引⼊ Jar B 和Jar C。
Jar A 和项目B 就是项目A 的直接依赖。Jar B,Jar C是间接依赖。
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
1.5 依赖排除
当前阶段我们需要依赖的库并不多,但随着项目的越来越复杂,库之间的依赖关系也会变得越来越复杂。如上图中,如果项目A不需要Jar B,也可以通过排除依赖的方式来实现。
排除依赖: 指主动断开依赖的资源。(被排除的资源无需指定版本)
maven还有⼀些功能是依赖调解,可选依赖等
依赖调解:当项目中的依赖存在依赖冲突时,例如存在这样的依赖:
- A->B->C->X(1.0)
- A->D->X(2.0)
Maven会采用最短路径优先的原则去选择依赖,这里 2 的依赖路径更短,所以会选择X(2.0),当然我们也可以选择指定某个依赖的版本,也可以指定X的版本
1.6 Maven Helper 插件
当项目比较复杂时,我们就会有Jar包 冲突的问题,这时候就需要去解决依赖冲突。解决冲突之前,需要先找到冲突,我们可以使用 Maven Help 插件来观察包和包之间的依赖关系。
- 插件(plugin) 就是对程序的⼀些特定场景,做出⼀些特定的功能的扩展
安装插件:File -> Settings ->Plugins -> 搜索 'Maven Help' -> 找到对应插件,点击Install 安装即可,安装后需要重启下idea,才能生效。

重启 IDEA 后,在项目的下方看到这个,就说明下载成功了:

打开pom文件,可以看到Jar包之间的依赖关系:

可以右键排除掉⼀些依赖:

当然,想要排除上述的 protobuf.... ,也可以使用 <exclusions> 标签中排除依赖,注意无需指定版本号:

2. Maven 仓库
我们通过短短几行代码,就把依赖 jar 包放在了项目里,具体是如何做的呢?

这个代码,我们称之为 "坐标",也就是唯⼀的。 在Maven中,根据 groupId、artifactId、version 的配置,来唯⼀识别⼀个 jar 包,缺⼀不可。
当我们在pom文件中配置完依赖之后,点击刷新,Maven会根据坐标的配置,去仓库里寻找 Jar包,并把他下载下来,添加到项目中。这个Jar包下载的地方就称为仓库。
仓库:用于存储资源,管理各种jar包。
Maven仓库的本质就是⼀个目录(文件夹),这个目录被用来存储开发中所有依赖(jar包,插件等)。
Maven仓库分为两大类:本地仓库和远程仓库。其中远程仓库又分为中央仓库、私服 和 其他公共库。
2.1 本地仓库
本地仓库:自己计算机上的⼀个目录(用来存储 jar包),当项目中引入对应依赖 jar 包后,首先会查找本地仓库中是否有对应的 jar包
- 如果有,则在项目直接引用
- 如果没有,则去中央仓库中下载对应的jar包到本地仓库

本地仓库地址可以通过Maven配置查看:File -> Settings

查看该仓库目录,可以看到该目录下有很多的 jar (最开始是空的,随着Maven的使用,该仓库下文件会越来越多)

2.2 中央仓库
中央仓库:maven 软件中内置⼀个远程仓库地址,就是中央仓库,服务于整个互联网。Maven 团队维护,全球唯⼀。
仓库地址:https://repo1.maven.org/maven2/
如以下,是一堆的目录

可以通过 https://mvnrepository.com/ 这个网站来查询并下载。
我们可以把自己写好的Jar包上传到中央仓库(具备⼀定的要求),也可以从中央仓库下载Jar包。
查找Jar的坐标
①访问 https://mvnrepository.com/
②进行查找,比如mysql

③选择要添加的Jar包版本

④查看Jar包对应坐标

2.3 私有服务器(私服)
私服: ⼀般由公司团队搭建的私有仓库。私服属于某个公司,或者某个部门,往往需要⼀定权限。
有了私服之后,Maven依赖下载的顺序又发生了变化:

当Maven需要下载资源的时候:
- 先从本地仓库获取, 本地仓库存在, 则直接返回
- 如果本地仓库没有, 就从私服请求, 私服存在该资源, 就直接返回
- 如果私服上不存在该资源,则从中央仓库下载, 中央仓库不存在, 就报错了
- 如果中央仓库中存在, 就先缓存在私服上之后,再缓存到本地仓库里, 再为Maven的下载请求提供服务
私服是很多人在使用的,所以只需要第⼀个使用者下载⼀次就可以了。
2.4 Maven 设置国内源
因为中央仓库在国外,所以下载起来会比较慢,所以咱们选择借助国内⼀些公开的远程仓库来下载资源。接下来介绍,如何设置国内源。
①配置当前项目setting:

②配置国内源:Maven 仓库默认在国外 https://mvnrepository.com/, 国内使用时会比较慢,我们可以更换为 阿里云 的仓库
也可以选择其他的仓库,参考:Maven 镜像地址大全
打开settings.xml, 在 mirrors 节点上,添加内容如下:
XML
<mirror>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirror>
③设置新项目的 settings.xml
上述配置的内容,只对当前项目生效,为了让后续新建的项目也生效,需要重新设置⼀下新项目的 Settings。
- 当前项目和新项目共用⼀个setttings文件即可,所以新项目的设置,只需要确认⼀下settings文件的路径即可。


3. 第一个 SprintBoot 程序
在学习SpringBoot之前,我们先来认识⼀下Spring
我们看下Spring官方 (https://spring.io/) 的介绍

可以看到,Spring 让Java程序更加快速,简单和安全。Spring对于速度、简单性和生产力的关注使其成为世界上最流行的Java框架。Spring官方提供了很多开源的项目,覆盖范围从Web开发到大数据,Spring发展到了今天,已经形成了自己的生态圈。我们在开发时,也倾向于使用Spring官方提供的技术,来解决对应的问题。

这些项目都是基于Spring Framework 来进行开发的,但是Spring Framework存在配置多,入门难的问题,Spring 也意识到了这个问题,为了简化开发者的使用,从而创造性的推出了SpringBoot。
Spring Boot 的诞生是为了简化 Spring 程序开发的.
Spring Boot 翻译⼀下就是 Spring 脚手架,脚手架,就像以下图:

盖房子的这个架子就是脚手架,脚手架的作用是砌筑砖墙,浇筑混凝土、方便墙面抹灰,装饰和粉刷的,简单来说,就是使用脚手架可以更快速的盖房子。
而 Spring Boot 就是 Spring 框架的脚手架,它是为了快速开发 Spring 框架而诞生的。
3.1 SpringBoot 项目的创建
3.1.1 使用网页创建
不使用 Idea 也可以创建 Spring Boot 项目,我们可以使用 Spring 官方提供的网页版来创建 Spring Boot 项目。
网页版创建项目先访问:https://start.spring.io,如下图所示:

点击获取代码按钮会下载⼀个 Spring Boot 的 zip 包,解压 zip 之后目录如下:

然后再使用 Idea 打开之后,Spring Boot 项目就算创建成功了。
3.1.2 使用 Idea 创建
Idea 社区版,要先安装 Spring Boot Helper 插件才能创建 Spring Boot 项目
可以从官网中下载插件,插件地址:https://plugins.jetbrains.com/plugin/18622-spring-boot-helper/versions
或者找到免费版本的,下载到本地,然后从本地磁盘上导入下载:

yi选择刚才下载的插件, 安装, 重启Idea即可。此时查看已安装插件安装好之后,它的名字就变成了 Spring Initializr and Assistant,如下图所示:

① 创建 SpringBoot 项目


选择 Spring Boot 版本,以及添加依赖项目:

最后点击选择路径,点击创建,即创建项目成功:

打开 pom 文件,记得将版本中的 release 删除掉:

删除之后记得刷新 Maven,如果发现并没有 Maven

那么可能 IDEA 没识别这是 Maven 项目,pom.xml 存在,但是 IDEA 没有把它识别成 maven 项目:
- 在左侧项目树,右键 pom.xml
- 选择 Add as Maven Project(添加为 Maven 项目)
- ✅ 此时右侧 Maven 面板就会出现,自动加载项目依赖。

点击刷新,下载依赖。
问题:如以下的情况,刷新很多次,发现右部分的包下载不下来

那么此时有两种解决方式:
添加版本好,重新刷新:就下载下来了

或者先删除掉本地仓库,然后重新刷新下载:

到这里,pom 文件中没有再标红,那么说明下载依赖成功。
在上述创建的整个 Spring Boot 项目中,最重要的是以下的两个部分:

其他的都可以删除掉,如果有上传到 仓库的需求,可以保留 git 文件,而 .idea 文件夹 是 IDEA 项目启动后自动生成的,就算删除掉,等下次项目启动后也会重新下载:

② 项目代码和目录介绍
pom.xml文件里的具体信息,不需要过度关注,我们主要看 **<dependencies>**标签里面的内容:
pom文件中,引入了两个依赖:
- spring-boot-starter-webmvc:包含了web应用开发所需要的常见依赖
- spring-boot-starter-webmvc-test:包含了单元测试所需要的常见依赖

Spring Boot 项目有两个主要的目录:main 文件夹 和 test 文件夹:

📂 src/main 【业务主代码/Java源代码】
- 放项目真正要运行的代码,程序打包、上线时,这部分会被编译进最终 jar 包。
- src/main/java:写你的业务 Java 代码,控制器、实体类、service、启动类SpringbootDemoApplication都在这里。
- src/main/resources:放配置文件,比如application.yml/application.properties、静态资源、配置 xml 等。
程序运行,实际执行的就是 main 下面的代码。
📂 src/test 【单元测试代码】
- 专门放测试代码,用来写单元测试,测试你的业务逻辑是否正确。
- src/test/java:写测试类,图里的SpringbootDemoApplicationTests就是自动生成的测试类。
- src/test/resources:测试环境专用配置文件。
关键点:
- 打包上线的时候,test 下面的代码不会打进 jar 包,只用于本地开发测试。
- test 包里面可以直接访问 main 包里面写的类。
- 运行测试只会执行 test 目录的代码,不会启动完整业务程序。
- main:正经干活的代码,给用户用
test:程序员自测用的代码,不上线 - 举个例子:在
main写一个查询用户的方法; 在test写测试方法,调用这个方法,验证返回结果对不对。
测试类:
启动类:
点击启动类的 main 方法运行第一个 SpringBoot程序:

③ 网页输出 Hello Spring Boot!
用 Spring Boot 来实现和浏览器及用户的交互,在创建的项目包路径下创建 HelloController类,实现代码如下:

HelloController 类 作用:这是 SpringBoot 的控制器(Controller)(Web 请求处理器),用来接收浏览器 / 客户端发过来的 http 请求,并直接返回一段文本作为响应。简单来说,它是一个"网络入口接待员"。
注解 解释(了解,接下来会学习):
- @RestController:顶部注解,相当于给这个"接待员"贴了个身份标签,把这个类标记成接口控制器,它的方法返回的字符串不跳转页面,直接作为响应体返回给浏览器。
- @RequestMapping("/hello"):方法上的注解,映射访问路径 ,相当于给方法贴了个"门牌号"。意思是,只要用户访问http://服务器地址:端口/hello这个路径,就执行这个 hello() 方法。
- return "Hello SpringBoot!";(方法体):这是具体的"接待内容"。当请求到达时,这个方法会执行,并把字符串 "Hello SpringBoot!" 作为 HTTP 响应体返回给客户端。
完整流程:
- 启动 SpringbootDemoApplication 主程序
- 在浏览器地址栏输入:http://127.0.0.1:8080/hello(默认端口是8080)
- 触发 hello() 方法
- 直接在网页页面输出文字:Hello SpringBoot!
启动启动类:

在浏览器地址栏输入:http://127.0.0.1:8080/hello,然后就会看到文本:

当然,在注解 @RequestMapping(" ") 中的访问路径还可以套层,例如变成 @RequestMapping("/hello/zzz"):

重新启动主程序,如果还访问原来的 http路径,就会发现这个路径不存在:

需要正确访问它的路径:

3.2 Web 服务器
浏览器和服务器两端进行数据交互,使用的就是HTTP协议

前⾯我们已经学习了 HTTP 协议(【网络原理】HTTP/HTTPS协议-CSDN博客),知道了 HTTP 协议就是 HTTP 客户端和 HTTP 服务器之间的交互数据 的格式
Web 服务器就是对HTTP协议进行封装,程序员不需要直接对协议进行操作(自己写代码去解析http协议 规则),让Web开发更加便捷,所以Web服务器也被称为WWW服务器, HTTP服务器,主要功能是提供网上信息浏览服务
常见的Web服务器有:Apache,Nginx, IIS, Tomcat, Jboss等。
SpringBoot 内置了Tomcat服务器, 无需配置即可直接运行,而Tocmat默认端⼝号是8080,所以我们程序访问时的端口号也是8080。
3.2.1 请求和响应分析流程
(详细看 【网络原理】HTTP/HTTPS协议-CSDN博客)

浏览器输⼊URL之后, 发起请求, 就和服务器之间建立了连接:

浏览器:
- 输入网址:http://127.0.0.1:8080/hello/sayhi
- 通过IP地址127.0.0.1定位到网络上的⼀台计算机, 127.0.0.1 就是本机
- 通过端⼝号8080找到计算机上对应的进程 , 也就是在本地计算机中找到正在运行的8080端口的程序
- /user/sayhi 是请求资源位置
- 资源:对计算机而言,资源就是数据
- web资源:通过网络可以访问到的资源(通常是指存放在服务器上的数据)
- http://127.0.0.1:8080/user/sayhi ,就是向本地计算机中的8080端⼝程序,获取资源位置 是/user/sayhi 的数据,发给浏览器。
服务器:
- 接收到浏览器发送的信息(如:/user/sayhi)
- 在服务器上找到 /user/sayhi 的资源
- 把资源发送给浏览器
3.2.2 HTTP 状态码
① 404
404 表示用户访问的资源不存在,大概率是 URL 的路径写的不正确。
示例1:URL写错

示例2:注解写错


通过Fiddler观察Http请求:

② 500
服务器出现内部错误,⼀般是服务器的代码执行过程中遇到了⼀些特殊情况(服务器异常崩溃)会产生这个状态码。
示例:



③ 无法访问此网站
⼀般是 Tomcat 启动失败了。
这种情况⼀般是服务未成功启动, 也就是tomcat未启动,或者IP/端口写错
打开 Fiddler 的话,页面是这样的:

关闭 fiddler 的话,是这样的:

4. 总结
Spring Boot 是为了快速开发 Spring 而诞生的,Spring Boot 具备:
- Spring Boot 提供了启动添加依赖的功能,可以快速集成框架
- 内置web服务器,无需配置 Tomcat 等 Web服务器,直接运行和部署程序
- 可以完全抛弃繁琐的 XML,使用注解和配置的方式进行开发
- 支持更多的监控的指标,可以更好的了解项目的运行情况等特点
Spring Boot 可使用 Idea 或网页创建,它的设计思想是约定大于配置,类上标注 @SpringBootApplication 就可以启动 Spring Boot 项目了。