SpringBoot入门
前言:什么是Spring?
Spring家族提供了一整套完整的Java应用程序开发解决方案,从底层框架到上层应用,从单体应用到分布式系统,都可以使用Spring家族中的项目和技术来实现。Spring家族的出现极大地简化了Java应用程序的开发过程,提高了开发效率和应用程序的质量。
Spring全家桶:
其中最核心,最基础的就是SpringFramework。其他spring家族的技术都是基于SpringFramework。它提供很多实用功能,如:依赖注入、事务管理、web开发支持、数据访问、消息服务等等。
但是他也有问题:1.配置繁琐 2.入门难度大
这时就推出了SpringBoot:
SpringBoot是一个用于快速创建企业级应用程序的开源框架,使开发人员能够更快速地创建和部署高质量的应用程序 。Spring makes Java simple
在web的课程中,SpringBoot贯穿始终,他也是Spring官方推荐的学习之首
SpringBootWeb快速入门
需求:
- 首先创建一个Springboot工程,并勾选web开发所需的依赖
- 在main包下创建一个HelloController ,添加方法hello,并添加注解
- 测试
1创建:
分为创建springboot项目和模块,现在我们先创建项目
(之前我们设置了创建项目自动创建maven)
2.接着创建hellocontroller类
3.运行
网页:
控制台:
HTTP协议
超文本传输协议:规定了浏览器和服务器之间数据传输的规则。
特点:
- 基于TCP协议:面向连接,安全
- 基于请求-响应模型:一次请求对应一次响应
- HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
- 缺点:多次请求间不可共享数据
- 如:将商品加入购物车是一个请求 -响应操作,发起去购物车结算的请求后,因为无法获取哪些商品加入了购物车,会导致此次请求无法正确展示数据。具体使用的时候,我们发现京东是可以正常展示数据的,原因是Java早已考虑到这个问题,并提出了使用会话技术(Cookie、Session)来解决这个问题。
- 优点:速度快
- 缺点:多次请求间不可共享数据
请求数据格式:
- 请求行:第一行(请求方式+资源路径+协议)
- 请求头:第二行开始,格式key:value
- 请求体:POST请求,存放请求参数
基于之前用SpringBoot开发的一个请求相应程序,运行
打开浏览器检查模式
点击***work,查看请求报文
分别是请求行,请求头,请求体
Host: 表示请求的主机名
User-Agent: 浏览器版本。 例如:Chrome浏览器的标识类似Mozilla/5.0 ...Chrome/79 ,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...)like Gecko
A***ept:表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有;
A***ept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;
A***ept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等。
Content-Type:请求主体的数据类型
Content-Length:数据主体的大小(单位:字节)
常用请求方式:
响应数据格式:
响应行:协议+状态码+描述
响应头:格式key:value
响应体:存放响应数据
ontent-Type:表示该响应内容的类型,例如text/html,image/jpeg ;
Content-Length:表示该响应内容的长度(字节数);
Content-Encoding:表示该响应压缩算法,例如gzip ;
Cache-Control:指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒 ;
Set-Cookie: 告诉浏览器为当前页面所在的域设置cookie ;
响应状态码
状态码分类 | 说明 |
---|---|
1xx | 响应中 — 临时状态码。表示请求已经接受,告诉客户端应该继续请求或者如果已经完成则忽略 |
2xx | 成功 — 表示请求已经被成功接收,处理已完成 |
3xx | 重定向 — 重定向到其它地方,让客户端再发起一个请求以完成整个处理 |
4xx | 客户端错误 — 处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等 |
5xx | 服务器端错误 — 处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等 |
参考:
响应状态码.md
关于响应状态码,我们先主要认识三个状态码,其余的等后期用到了再去掌握:
- 200 ok 客户端请求成功
- 404 Not Found 请求资源不存在
- 500 Internal Server Error 服务端发生不可预期的错误
要知道浏览器端接收到响应数据后会自动解析数据,就如同这样显示在页面上
那么在这之前服务器端如何解析请求报文的?
要了解到服务器针对HTTP协议的解析机制
SpringBootWeb入门.md
现在大家知道了服务器是可以使用java完成编写,是可以接受页面发送的请求和响应数据给前端浏览器的,而在开发中真正用到的Web服务器,我们不会自己写的,都是使用目前比较流行的web服务器。如:Tomcat
Web服务器-Tomcat
了解Tomcat:
- 我们先不使用Tomcat访问一个本地html文件
可以看出路径是一个本地文件路径,而我们一般在浏览器中访问的页面路径并不是这样的
- 使用tomcat,访问html
1。将静态资源放入web服务器上
2。apache-tomcat-9.0.27–>bin–>startup.bat 启动服务器
因为windows默认使用GBK编码方式,所以我们先去配置文件中 修改,防止乱码;SpringBootWeb入门.md
最后访问:[http://localhost:8080/demo/index.html](http://localhost:8080/demo/index.html)
即html资源的路径
注意此操作要提前将idea占用的8080端口关闭,因为tomcat默认占用8080端口
从上面两个操作可以看出tomcat是一个web服务器
其他具体操作:SpringBootWeb入门.md
入门程序解析:
关于web开发的基础知识,我们可以告一段落了。下面呢,我们在基于今天的核心技术点SpringBoot快速入门案例进行分析。
3.3.1 Spring官方骨架
之前我们创建的SpringBoot入门案例,是基于Spring官方提供的骨架实现的。
Spring官方骨架,可以理解为Spring官方为程序员提供一个搭建项目的模板。
我们可以通过访问:https://start.spring.io/ ,进入到官方骨架页面
具体生成操作见SpringBootWeb入门.md
结论:不论使用IDEA创建SpringBoot项目,还是直接在官方网站利用骨架生成SpringBoot项目,项目的结构和pom.xml文件中内容是相似的。
3.3.2 起步依赖
在我们之前讲解的SpringBoot快速入门案例中,同样也引用了:web依赖和test依赖
spring-boot-starter-web和spring-boot-starter-test,在SpringBoot中又称为:起步依赖
而在SpringBoot的项目中,有很多的起步依赖,他们有一个共同的特征:就是以spring-boot-starter-
作为开头。在以后大家遇到spring-boot-starter-xxx这类的依赖,都为起步依赖。
起步依赖有什么特殊之处呢,这里我们以入门案例中引入的起步依赖做为讲解:
- spring-boot-starter-web:包含了web应用开发所需要的常见依赖
- spring-boot-starter-test:包含了单元测试所需要的常见依赖
spring-boot-starter-web内部把关于Web开发所有的依赖都已经导入并且指定了版本,只需引入
spring-boot-starter-web
依赖就可以实现Web开发的需要的功能
Spring的官方提供了很多现成的starter(起步依赖),我们在开发相关应用时,只需要引入对应的starter即可。
官方地址:https://docs.spring.io/spring-boot/docs/2.7.2/reference/htmlsingle/#using.build-systems.starters
每一个起步依赖,都用于开发一个特定的功能。
举例:当我们开发中需要使用redis数据库时,只需要在SpringBoot项目中,引入:spring-boot-starter-redis ,即可导入redis开发所需要的依赖。
3.3.2 SpringBoot父工程
在我们之前开发的SpringBoot入门案例中,我们通过maven引入的依赖,是没有指定具体的依赖版本号的。
为什么没有指定版本号,可以正常使用呢?
- 因为每一个SpringBoot工程,都有一个父工程。依赖的版本号,在父工程中统一管理。
3.3.3 内嵌Tomcat
问题:为什么我们之前书写的SpringBoot入门程序中,并没有把程序部署到Tomcat的webapps目录下,也可以运行呢?
原因呢,是因为在我们的SpringBoot中,引入了web运行环境(也就是引入spring-boot-starter-web起步依赖),其内部已经集成了内置的Tomcat服务器。
我们可以通过IDEA开发工具右侧的maven面板中,就可以看到当前工程引入的依赖。其中已经将Tomcat的相关依赖传递下来了,也就是说在SpringBoot中可以直接使用Tomcat服务器。