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版本不支持等

常见的响应状态码

状态码英文描述解释
200OK客户端请求成功,即处理成功,这是我们最想看到的状态码
302Found指示所请求的资源已移动到由Location响应头给定的 URL,浏览器会自动重新访问到这个页面
304Not Modified告诉客户端,你请求的资源至上次取得后,服务端并未更改,你直接用你本地缓存吧。隐式重定向
400Bad Request客户端请求有语法错误,不能被服务器所理解
403Forbidden服务器收到请求,但是拒绝提供服务,比如:没有权限访问相关资源
404Not Found请求资源不存在,一般是URL输入有误,或者网站资源被删除了
405Method Not Allowed请求方式有误,比如应该用GET请求方式的资源,用了POST
428Precondition Required服务器要求有条件的请求,告诉客户端要想访问该资源,必须携带特定的请求头
429Too Many Requests指示用户在给定时间内发送了太多请求(“限速”),配合 Retry-After(多长时间后可以请求)响应头一起使用
431 Request Header Fields Too Large请求头太大,服务器不愿意处理请求,因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交。
500Internal Server Error服务器发生不可预期的错误。服务器出异常了,赶紧看日志去吧
503Service Unavailable服务器尚未准备好处理请求,服务器刚刚启动,还未初始化好

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

响应头

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5)HTTP解析

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

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

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

2.3 Tomcat

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

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

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

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

3. 请求响应

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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,会报错,解决办法——再加注解

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注:@Resource与@Autowired区别

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

4. 数据库

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/292628.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java EE初阶八】多线程案例(计时器模型)

1. java标准库的计时器 1.1 关于计时器 计时器类似闹钟,有定时的功能,其主要是到时间就会执行某一操作,即可以指定时间,去执行某一逻辑(某一代码)。 1.2 计时器的简单介绍 在java标准库中,提供…

ChatGPT怎么帮我上班的

1.解放生产力 1)标准格式,完美输出。GPT对于公文等具有一定标准格式的文件,可以进行完美仿写,随随便便以假乱真那都是小菜一碟,这对于经常要开展规范成文的人来说,简直就是个福音,只要前期调教…

使用“反向代理服务器”的优点是什么?

反向代理服务器是一种网络架构模式,通常位于客户端和实际服务器之间,用于处理客户端请求并转发到实际服务器。以下是使用反向代理服务器的优点: 1.安全性:反向代理服务器可以提供额外的安全层。通过在反向代理服务器上配置防火墙和…

Jmeter 性能压测 —— 常见问题

1、怎么确定系统最大负载? 通过负载测试,不断增加用户数,随着用户数的增加,各项性能指标也会相应产生变化,当出现了性能拐点。 比如,当用户数达到某个数量级时,响应时间突然增长,那…

电脑重装后恢复音频输出(安装声卡驱动)

写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 前言基本设置检查声卡驱动自带Realtek高清晰音频管理器不带Realtek高清晰音频管理器 总…

ROS学习笔记(8)进一步深入了解ROS第二步

0.前提 在上一讲中我提到过该系列是基于宾夕法尼亚大学工程学院的ROS公开课,系列文章将来源于公开课中的课后习题。该系列可以很好的帮助大家更加深入的了解ROS的一些概念。(有效面对HR的提问。) 1. (C)What is a nodehandle object? Can we…

vscode无识别已有的maven java项目(visual studio code not recognizing java project)

文章目录 事情经过尝试疑惑问题解决结论 事情经过 未安装任何Java Extension Pack使用 Maven 的 archetype:generate 命令来创建一个新的项目使用vscode打开了该目录然后安装Java Extension Pack等java插件配置了vscode settings.json中的 java.configuration.runtimes和 java…

网站迁移和SEO:损害排名的常见错误

正在规划站点迁移? 迁移是更困难的 - 通常是可怕的 - SEO任务之一。 为了让它发挥作用,你需要避免常见的陷阱,这些陷阱可能会影响你的知名度,并导致流量和收入的损失。 8 月 11 日,我主持了一场赞助的搜索引擎杂志网…

TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇

TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇 文章目录 TypeScript 从入门到进阶系列前言一、object 类型1、基础运用2、可选属性3、任意属性4、只读属性 readonly5、对象中的函数 二、数组类型1、数组的运用2、使用接口定义数组3、argumen…

关于标准那些事——第六篇 四象之“玄武”(格式的编排)

两仪生四象——东方青龙(木)、西方白虎(金)、南方朱雀(火)、北方玄武(水) 分别对应标准编写之四象——层次的编写、要素的编写、要素的表述、格式的编排。 今天来分享一下 格式的编…

Python 标准库中的 csv 包

0. Abstract 官方文档很罗嗦,长篇大论例子少。本文将举例说明 csv 包的用法,然后补充一些必要的说明。 1.0 CSV 文件 CSV(Comma-Separated Values,逗号分隔值)文件是一种常见的以纯文本形式存储数据的文件格式。它使用逗号作为字段之间的分隔符&#…

【Linux】——基本指令(二)

💗个人主页💗 ⭐个人专栏——数据结构学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读:1. vim 指令2. head指令3. tail指令4. tree指令5. 输出重定向6. echo指令7. wc指令8. | 字符9. date指令…

CMake入门教程【核心篇】属性管理set_property和get_property

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「本文的内容」:CMake入门教程 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 1.概述2.设置属性 - …

JS中 focus 和 blur 焦点事件

发现的一个小知识点 focus 获取焦点事件 代码如下&#xff1a; <body><input type"text" placeholder"input输入框"><script>let input document.querySelector(input)input.addEventListener(focus, function (e) {e.target.style.…

Java学校教务管理系统源码带微信小程序

运行环境&#xff1a;jdk8mysql5.7IntelliJ IDEAmaven 技术&#xff1a;springbootmybatislayuishirojquery 教务管理系统是一个基于网络的在线管理平台, 帮助学校管理教务系统&#xff0c;用一个帐号解决学校教务教学管理&#xff0c; 灵活的定制符合学校自己实际情况的教务系…

如何理解面向对象的OO设计原则和设计模式?

一、如何理解面向对象的编程原则? 单一职责原则(Single Responsibility Principle) 一个类,应该由一组相关性很高的数据和方法组成。一个类应该仅有一个引起它变化的原因。单一职责最难界定的就是关于“职责”的定义,往往需要丰富的经验和对业务的认知程度,这也更加容易引…

WEB 3D技术 three.js 法向量演示性讲解

本文 我们来说法向 法向 又叫 法向量 就是 我们一个三维物体 顶点垂直于面 的方向 向量 他的作用 用来做光反射 根据光照的方向 根据面进行反射 我们上文写的这个代码 import ./style.css import * as THREE from "three"; import { OrbitControls } from "…

数仓可视化5--superset的部署安装

1、superset简介 Apache Superset 是一个现代的数据探索和可视化平台。它功能强大且十分易用&#xff0c;可对接各种数据源&#xff0c;包括很多现代的大数据分析引擎&#xff0c;拥有丰富的图表展示形式&#xff0c;并且支持自定义仪表盘。 2、安装步骤 2.1、安装Miniconda3 …

GBASE南大通用 ADO.NET EntityFramework 实体框架支持

GBASE南大通用 ADO.NET 驱动支持 EntityFramework 实体框架。 实体框架&#xff0c;可以理解成微软的一个 ORM 产品&#xff0c;用于支持开发人员通过对概 念性应用程序模型编程&#xff08;而不是直接对关系存储架构编程&#xff09;来创建数据访问应 用程序&#xff0c;目…

RedHat8、Centos8无法启动网卡解决方案,网卡未加入托管

只针对部分情况&#xff0c;网卡未加入托管导致 虚拟机开启 ifconfig 没有ens33网卡&#xff0c;无法上网 手动启动网卡提示 Connection ens33 is not available on device ens33 because device is strictly unmanaged使用nmtui配置IP信息&#xff0c;无法启动’ens160’网卡…
最新文章