初识 Spring Boot
目录
JavaEE导读
Maven
创建Maven项目
项目构建
管理依赖
Maven仓库
本地仓库
中央仓库
SpringBoot
Spring Boot项目创建
目录介绍
运行项目
输出 Hello world
Web服务器
总结
JavaEE导读
Java EE(Java Platform Enterprise Edition:Java平台企业版),是 JavaSE(Java 标准版)的扩展,用于解决企业级的开发需求,所以也可以称之为是一组用于企业开发的Java技术标准

什么是Web开发?
web(World Wide Web)即全球广域网,也称为万维网。简单地说,就是可以通过浏览器来和我们的程序进行交互。比如京东,淘宝,天猫,美团等网站项目
Web网站的工作流程
目前用户对PC端应用的开发结构模式主要分为C/S和B/S结构
CS 即 Client/Server(客户机/服务器)结构.常见的C/S架构的应用比如QQ,微信,各种网络游戏等等,一般需要安装并且与服务器进行网络通信的都属于此类。
CS 也叫 客户端/服务端 或 客户端/服务器
B/S 架构全称是浏览器/服务器(Browser/Server) 结构,分为Web浏览器、服务器程序、数据库服务三部分,可以理解为是对 C/S 架构一种改进,由于所有的业务逻辑都由服务器程序处理,所以客户端仅使用浏览器就可以完成所有操作,大大降低了客户端的维护成本

这里介绍的JavaEE项目都是基于B/S架构的

Maven
Maven是一个项目管理工具。基于POM(Project Object Model,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
通俗的说:Maven是一个项目管理工具,通过配置 pom.xml 文件获取 jar 包,而不用手动去添加 jar 包
创建Maven项目

pom.xml 文件就是MAVEN项目的配置文件

Maven 核心功能主要体现在两个方面:1.项目构建 2.管理依赖
项目构建
Maven 提供了标准的跨平台(Linux,Windows,MacOS等)的自动化项目构建方式
当我们开发了一个项目之后,代码需要经过编译,测试,打包,发布等流程,每次代码的修改,都需要经过这些流程,如果代码反复调试修改,这个流程就需要反复进行,就显得特别麻烦,而Maven 给我们提供了一套简单的命令来完成项目的构建

其中 package,可以完成项目的打包操作,用于描述项目的各种信息


打包就是把所有的class文件,全部放在一起,打成 jar 包或 war 包
jar 包和 war 包都是一种压缩文件
jar包就是把开发人员已经写好的一些代码进行打包,打好的 jar 包就可以引入到其他项目中,也可以直接使用这些 jar 包中的类和属性。另外也可以打成可执行 jar 包,这样的包就可以通过 java-jar 命令来执行
war包可以理解为是一个web项目,里面是项目的所有东西,通常用于网站
管理依赖
依赖:指当前项目运行所需要的 jar 包。上面说的,通过配置 pom.xml 文件获取 jar 包,这个 jar 包就是依赖
依赖配置:
1. 在pom文件标签内,添加依赖坐标<dependencies>
例如 mysql-connector-java
<dependencies><!--⾥⾯放置项⽬的依赖坐标, 可为多个 --><dependency><groupId>mysql</groupId> <!--组织ID--><artifactId>mysql-connector-java</artifactId> <!--项目ID--><version>8.0.30</version> <!--版本--></dependency>
</dependencies>
2. 点击刷新按钮,引入新加入的依赖 jar 包
后续有添加新的jar包,或者修改jar包版本,都需要通过该方式在项目中添加依赖

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

Maven Help插件:
安装之后,打开pom文件,可以看到 Jar 包之间的依赖关系
依赖传递
早期没有使用maven时,向项目中添加依赖的 jar 包时,需要把所有的 jar 包都复制到项目工程下。比如A依赖B,B依赖C,那么A项目引入B的同时,也需要引入C,如果我们手动管理这个依赖,这个过程就会比较麻烦,我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的
但使用maven的话,就可以避免管理所需依赖的关系。我们只需要在pom文件中,定义直接依赖就可以了,由于maven的依赖具有传递性,所以会自动把所依赖的其他jar包也一起导入
比如引入 mysql 依赖时,maven 会自动引入 protobuf
依赖排除
当前阶段我们需要依赖的库并不多,但随着项目的越来越复杂,库之间的依赖关系也会变得越来越复杂。如果项目A 不需要 Jar B,也可以通过排除依赖的方式来实现
比如 引入 mysql 依赖时不需要 protobuf 依赖,可以使用这种方式排除依赖
点击 Exclude 后,dependency 标签内就会生成一段代码,刷新后即可排除
Maven仓库
我们通过短短几行代码,就把依赖jar包放在了项目里,具体是如何做的呢?
1. 这个代码,我们称之为“坐标”,也就是唯一的
2. 在Maven中,根据 groupld、artifactld、version 的配置,来唯一识别一个 jar 包,缺一不可
3. 当我们在 pom 文件中配置完依赖之后,点击刷新,Maven 会根据坐标的配置,去仓库里寻找Jar包,并把他下载下来,添加到项目中。这个 Jar 包下载的地方就称为仓库
4. 仓库:用于存储资源,管理各种 jar 包
5. Maven仓库的本质就是一个目录(文件夹),这个目录被用来存储开发中所有依赖(jar包,插件等)
6. Maven仓库分为两大类:本地仓库和远程仓库。其中远程仓库又分为中央仓库,私服和其他公共库
本地仓库
自己计算机上的一个目录(用来存储jar包)
当项目中引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包
- 如果有,则在项目直接引用
- 如果没有,则去中央仓库中下载对应的jar包到本地仓库
本地仓库地址可以通过Maven配置查看:

中央仓库
maven软件中内置一个远程仓库地址,就是中央仓库,服务于整个互联网。由Maven团队维护,全球唯一
仓库地址:https://repo1.maven.org/maven2/
可以通过 https:∥/mvnrepository.com 这个网站来查询并下载
我们可以把自己写好的Jar包上传到中央仓库(具备一定的要求),也可以从中央仓库下载Jar包
SpringBoot
Spring:
1. Spring让Java程序更加快速,简单和安全。Spring对于速度、简单性和生产力的关注使其成为世界上最流行的Java框架。
2. Spring官方提供了很多开源的项目,覆盖范围从Web开发到大数据,Spring发展到了今天,已经形成了自己的生态圈。我们在开发时,也倾向于使用Spring官方提供的技术,来解决对应的问题
Spring 有两层含义
1. Spring Framework:Spring Core 核心,原生框架
2. Spring 家族:大多情况下说 Spring 指的是 Spring 家族
SpringBoot:
Spring Boot 就是 Spring框架的脚手架,它是为了快速开发 Spring 框架而诞生的

Spring Boot项目创建
使用IDEA专业版创建。社区版要安装 Spring Boot Helper 插件才能创建 Spring Boot 项目
依次点击:File -> New ->Project


注意不要选带 SNAPSHOT 的版本。
SNAPSHOT是快照版,非稳定版,可以修改(可以理解为开发版本)
其他版本,是稳定版,发布之后就不能改了,哪怕有 bug 也不能改,只能通过升级版本的方式修复
创建完成后,可以删除一些无用文件,最终效果如下图

其中 .idea 文件也可以删除,但每次重新打开IDEA都会重新生成
在拿到别人的代码时,首先要把 .idea 文件删除,不删掉就是用的别人的配置,在自己的IDEA上不一定能运行成功
pom文件:
pom.xml文件里的具体信息,不需要过度关注,我们主要看<dependencies>标签里面的内容
pom文件中,引入了两个依赖
spring-boot-starter-web:包含了web应用开发所需要的常见依赖
spring-boot-starter-test:包含了单元测试所需要的常见依赖
目录介绍

1. src/main/java:Java 源代码
2. src/main/resources:静态资源或配置文件
- /static:静态资源文件夹,比如前期学的 js,css,html 等静态文件,不需要服务器数据进行绑定的页面。
- /templates:模版资源文件夹,主要存放动态模板文件,比如 JSP,Freemarker,Thymeleaf 等需要服务器动态渲染数据的文件
3. src/test/java:测试代码源代码
4. target:编译后的文件路径
5. pom.xml:maven配置文件
运行项目

点击启动类的main方法就可以运行Spring Boot 项目了,启动成功如下图所示:

输出 Hello world
在创建的项目包路径下创建UserController 文件,实现代码如下:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@RequestMapping("/hello")public String sayHi(){return "hello,Spring";}
}
重新启动项目,访问 http://127.0.0.1:8080/hello 最终效果如下:

分析:
浏览器:
输入网址:http://127.0.0.1:8080/hello
1. 通过IP地址127.0.0.1定位到网络上的一台计算机,127.0.0.1就是本机
2. 通过端口号8080找到计算机上对应的进程,也就是在本地计算机中找到正在运行的8080端口的程序
3. /hello 是请求资源位置
资源:对计算机而言资源就是数据
web资源:通过网络可以访问到的资源(通常是指存放在服务器上的数据)
http://127.0.0.1:8080/hello 就是向本地计算机中的8080端口程序,获取资源位置是 /hello 的数据;8080端口程序,在服务器找 /hello 位置的资源数据,发给浏览器
服务器:
1. 接收到浏览器发送的信息(如:/hello)
2. 在服务器上找到 /hello 的资源
3. 把资源发送给浏览器
Web服务器
常见的Web服务器有:Apache,Nginx,IIS,Tomcat,Jboss等
HTTP 协议是 HTTP 客户端和 HTTP 服务器之间的交互数据的格式
Web 服务器就是对 HTTP 协议进行封装,程序员不需要直接对协议进行操作(自己写代码去解析http协议规则),让 Web 开发更加便捷,所以 Web 服务器也被称为 WWW 服务器(world wide web 的缩写,全球信息广播)
HTTP服务器的主要功能是提供网上信息浏览服务
SpringBoot 内置了Tomcat服务器,无需配置即可直接运行
Tocmat默认端口号是8080,所以我们程序访问时的端口号也是8080
总结
Spring Boot 是为了快速开发 Spring 而诞生的,Spring Boot具备:
1. Spring Boot 提供了启动添加依赖的功能,可以快速集成框架
2. 内置web服务器,无需配置 Tomcat 等 Web 服务器,直接运行和部署程序
3. 可以完全抛弃繁琐的 XML,使用注解和配置的方式进行开发
4. 支持更多的监控的指标,可以更好的了解项目的运行情况等特点
Spring Boot 可使用ldea 或网页创建,它的设计思想是约定大于配置,类上标注@SpringBootApplication 就可以启动Spring Boot 项目了






