一、JSON 基础语法

image-20250605165313724

二、Ajax - Axios发起异步请求

Ajax

作用:

  • 数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。
  • 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页,如:搜索联想、用户名是否可用的校验等。

Axios

Axios对原生的Ajax进行了封装,简化书写,快速开发。

使用步骤:

image-20250605200523447

简化写法

image-20250605200944585

Maven

一款用于管理和构建java项目的工具。

  • 依赖管理:方便的管理项目依赖的资源,避免版本冲突问题
  • 统一项目结构:提供标准、统一的项目结构
  • 项目构建:标准跨平台的自动化项目构建方式

仓库:

image-20250606142002180

创建

  • groupId:定义当前Maven项目隶属的组织名称(通常是域名反写,如space.ericzht)

  • artifactId:定义当前Maven项目名称

  • version:定义当前项目版本号

生命周期

Maven的生命周期是为了对所有的Maven项目构建过程进行抽象和统一。

Maven中有3套相互独立的生命周期:

  • clean:清理工作
  • default:核心工作,如:编译、测试、打包、安装、部署等
  • site:生成报告、发布站点等

image-20250606155547521

需要了解的五个生命周期:

image-20250606155629383

test为什么日志无法显示结果?

test包里的Java文件必须以Test结尾,日志没显示出来是因为类名错误,找不到test的文件

image-20250606162245333

Spring

SpringBoot

快速便捷的Spring框架,基于SpringBoot可以快速构建Spring框架。

SpringBoot快速入门

新建模块

依赖中要勾选Spring Web

image-20250606165510502

创建请求处理类 HelloController

image-20250606165617238

运行启动类,在浏览器中进行测试

image-20250606165652006

Tips:包被识别成文件夹怎么办?

右键Java目录,选择标记目录为源根

HTTP协议

概述

Hyper Text Tranfer Protocol 超文本传输协议

特点:

  1. 基于TCP协议:面向连接,安全
  2. 基于请求-响应模型:一次请求对应一次响应
  3. HTTP协议是无状态的协议:对事务处理没有记忆能力。每次请求-响应都是独立的。
    1. 缺点:多次请求之间不能共享数据
    2. 优点:速度快

请求数据

image-20250606190226500

响应数据

image-20250606190506831

image-20250606190525698

状态码大类

状态码分类 说明
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

Tomcat

概述

  • 一个开源免费的轻量级Web服务器,支持Servlet/JSP少量的JavaEE规范。
  • JavaEE:Java企业版,指企业级开发的技术规范总和。
  • Tomcat也被称为Web容器、Servlet容器。Servlet程序需要依赖于Tomcat才能运行
  • 对HTTP协议操作进行了封装,简化web程序开发。

请求

image-20250606195235597

Postman

在网页调试中,只能在地址栏添加内容,这是GET类型的请求,很难对POST类型的请求进行测试。于是出现了Postman插件。

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

常用于进行接口测试

SpringBoot接受请求的方式(简单参数)

1
2
3
4
5
6
7
8
@RestController
public class HelloController {
@RequestMapping("/simpleRequest")
public String simpleRequest(String name, int age){ // 直接把请求需要传的参数写在函数的参数列表中,会自动进行类型转换,由String转换为你写的类型
System.out.println(name + ":" + age);
return "OK";
}
}
1
2
3
4
5
@RequestMapping("/simpleRequest")
public String simpleRequest(@RequestParam(name = "name") String username, int age){ // 这里相当于给username添加了一个别名,叫name。到时候客户端发送请求的时候使用name进行请求。(不可以使用username)
System.out.println(username + ":" + age);
return "OK";
}

@RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递则报错。如果这个参数是可选的,可以将required属性设置为false。

原始方式接受请求*

image-20250606202508767

SpringBoot接受请求的方式(实体参数)

把所有参数封装到一个类中,获取时将参数全部放入类的对象中。

简单实体对象

image-20250606204025726

复杂实体对象

image-20250606204344296

注:这里要给类写toString方法,否则输出的是类的类似于地址的东西。

数组集合参数

  • 数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型参数即可接受参数

image-20250606205405653

  • 集合参数:需要使用 @RequestParam 绑定参数关系

image-20250606205627455

日期参数

image-20250606205848573

Json参数

image-20250606210022823

路径参数

image-20250606210426747

响应

image-20250608103212451

image-20250608103235300

这样响应回去的数据是各式各样的,前后端开发成本高、不便管理、很难维护。

—— 于是设定一个统一响应的规范 Result

image-20250608103355909

Springboot静态资源存放目录

image-20250608111230352

分层解耦

内聚:软件中各个功能模块内部的功能联系

耦合:衡量软件中各个层/模块之间的依赖、关联程度

软件设计原则:高内聚低耦合

三层架构

image-20250608112139339

  • Controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据。
  • Service:业务逻辑层,处理具体的业务逻辑。
  • Dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增删改查。

分层解耦

image-20250608113732272

上图这种架构,如果ServiceA要改为ServiceB,那么不仅要修改Service层的代码,还要修改Controller层的代码,Service层和Controller层耦合度较高,不利于后续开发。

于是Spring提出了控制反转依赖注入

image-20250608114114382

控制反转

Inversion Of Control,IOC

对象的创建控制权由程序自身转移到外部(容器)

依赖注入

Dependency Injection,DI

容器为应用程序提供运行时所依赖的资源

Bean对象

IOC容器中创建、管理的对象

步骤

只有单个bean
  1. 将Service层及Dao层的实现类交给IOC容器管理。 添加注解 @Component
  2. 为Controller及Service注入运行时依赖的对象。添加注解 @Autowired

​ 程序在运行时会自动为他们提供所注解的对象

如果要切换Service层的内容,直接将原来的Service层的@Component注解注释掉给新的添加注释就好了。

image-20250608182415261

image-20250608200511626

同时有多个bean

@Autowired 默认是按照类型进行的,如果存在多个相同的bean,会报错。

解决方法:

  1. 在想要执行的的注解上加上**@Primary**注解设置其为高优先级。
  2. @Autowired + @Qualifier(“bean的名称”)
  3. @Resource(name=”bean的名称”)

区别:

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

image-20250608203209548

Bean组件扫描

  • 前面声明bean的四大注解,要想生效,还需要被组件扫描注解**@ComponentScan**扫描

  • 启动类声明的注解**@SpringBootApplication**中,默认扫描的范围是启动类所在包及其子包

    如果在别的地方添加了组件,并且想要被扫描,就要使用 @ComponentScan(“包名”) 来显式配置,并且需要加上启动类所在的包名。

MyBatis

是一款优秀的持久层(dao层),用于简化JDBC的开发

快速入门

image-20250608210939248