JavaWeb——后端之SpringBoot基础知识

2. SpringBoot

官网:https://spring.io/

Spring全家桶:Spring已经形成了一种开发生态圈,其提供的若干子项目分别用于完成特定的功能

Spring Boot简化了Spring Framework,不用底层实现那么配置繁琐,可以快速构建应用程序、简化开发、提高效率

2.1 入门程序

2.2 HTTP协议

1)概念

超文本传输协议,规定了浏览器和服务器之间数据传输的规则

2)特点

  • 基于TCP协议:面向连接,安全
  • 基于请求-响应模型的:一次请求对应一次响应
  • HTTP协议是无状态的协议:没记忆,每次请求-响应都是独立的——速度快,但是多次请求之间不能共享数据

3)请求协议

格式:

  • 请求行:请求数据第一行(请求方式、资源路径、协议)
  • 请求头:第二行开始,格式是key: value(主机名,浏览器版本、……)
  • 请求体(POST特有):存放请求参数(加个空行与上面隔开)

注:GET和POST的区别

  • GET:请求参数在请求行中,没有请求体,并且请求大小是有限制的
  • POST:请求参数在请求体中,请求大小没有限制

4)响应协议

格式:

  • 响应行:第一行(协议、状态码、描述)
  • 响应头:第二行,格式是key: value
  • 响应体:最后一部分,存放响应数据(加个空行与上面隔开)

状态码大类

状态码分类 说明
1xx 响应中——临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它
2xx 成功——表示请求已经被成功接收,处理已完成
3xx 重定向——重定向到其它地方:它让客户端再发起一个请求以完成整个处理。
4xx 客户端错误——处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等
5xx 服务器端错误——处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等

常见的响应状态码

状态码 英文描述 解释
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 服务器尚未准备好处理请求,服务器刚刚启动,还未初始化好

状态码大全:https://cloud.tencent.com/developer/chapter/13553

响应头

JavaWeb——后端之SpringBoot基础知识_第1张图片

5)HTTP解析

客户端,也就是浏览器这一端,已经内置了解析的方法

服务器端该如何解析数据并响应数据

HTTP解析和响应过于繁琐——有公司把代码封装大软件中(Web服务器),最受欢迎的是Apache Tomcat

2.3 Tomcat

主要功能: 提供网上信息浏览服务

一个轻量级的web服务器,支持servlet、jsp等少量javavEE规范,也被称为web容器、servlet容器

HTTP默认端口号是80,如果修改了Tomcat端口号的配置为80,那么地址栏就不需要添加端口了

部署: 将应用放在webapps目录下,部署就完成了

3. 请求响应

JavaWeb——后端之SpringBoot基础知识_第2张图片

3.1 postman

概念: 网页调试与发送网页HTTP请求的Chrome插件

作用: 常用于接口测试

简单参数:参数 写在URL后面,请求名与形参对象属性名相同,自动类型转换;@RequestParam手动映射

实体参数:将简单参数放在一个实体类当中;请求参数名与实体对象的属性名一致,回自动接收封装

数组参数:将参数名与形参数组名称相同且定义为多个,定义数组类型形参即可接受参数;名一致直接封装;不一致@RequestParam

日期参数:@DataTimeFormat

json参数:@RequestBody

路径参数:@PathVariable

@RestController = @Controller + @ResponseBody

返回都是@ResponseBody,如果是字符串直接返回,是对象、集合要包装成json格式——>统一响应结果

public class Result {
	// 响应码,1代表成功;0代表失败
	private Integer code;
	// 提示信息
	private String msg;
	// 返回数据
	private Object data;
	// ……
}

3.2 分层解耦

都写在Controller中复用性和可读性都比较差——>单一职责原则

三层架构

  • 数据访问

  • 逻辑处理

  • 接收请求、响应数据

  • controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据

  • server:业务逻辑层,处理具体的业务逻辑

  • Dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增删改查

分层解耦

  • 内聚:软件中各个功能模块内部的功能联系 (一个内部)
  • 耦合:衡量软件中各个层/模块之间的依赖、关联程度 (多个之间)
  • 软件设计原则:高内聚、低耦合

思路: 设计一个容器,里面包含了实现类的对象,方法中需要使用对象的时候就去容器里面找,看有没有自己需要的对象

问题:

  • 如何将对象放在容器里面——控制反转
  • 如何从容器中取到需要的对象——依赖注入

控制反转: Inversion OfControl(IOC),对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转——在需要创建对象的类上方@Component

依赖注入: Dependency Injection(DI),容器为应用程序提供运行时,所依赖的资源,称之为依赖注入——在需要创建对象的上方@Autowired(运行时,IOC容器会提供该类型的bean对象,并赋值给该变量)

Bean对象: IOC容器中创建、管理的对象,称之为bean

1)IOC详解

注解 说明 位置
@Component 声明bean的基础注解 不属于以下三类时,用此注解——例如:工具类
@Controller @Component的衍生注解 标注在控制器类上
@Service @Component的衍生注解 标注在业务类上
@Repository @Component的衍生注解 标注在数据访问类上(由于与mybatis整合,用的少)

注:

  • 声明bean的时候,可以通过value属性指定bean的名字(后面跟个小括号),如果没有指定,默认为类名首字母小写
  • 使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller

Bean的组件扫描

  • 前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描
  • @ComponentScan注解虽然没有显式配置,但实际上已经包含在了启动类声明注解@SpringBootApplication中,默认扫描的范围是启动类所在包及其子包

2)DI详解

@Autowired注解,默认是按照类型进行,如果存在多个相同类型的bean,会报错,解决办法——再加注解

JavaWeb——后端之SpringBoot基础知识_第3张图片

注:@Resource与@Autowired区别

  • @Autowired是spring框架提供的注解,而@Resource是JDK提供的注解
  • @Autowired默认是按照类型注入,而@Resource默认是按照名称注入

4. 数据库

Dao数据访问是访问数据库中的数据

你可能感兴趣的:(#,JavaWeb,spring,boot,后端,java)