JavaWeb从入门到进阶(HTTP协议的请求与响应)

前言:我们前面学习了HTTP协议,这里我们接着学习HTTP协议的请求与响应。首先我们要明确最本质也是初学者最容易搞不懂的点,我们学的HTTP协议到底是什么,跟我们java程序员有什么关系,数据请求到哪里等等知识。

这里我们首先解释一下HTTP与java程序员的关系,HTTP是浏览器访问者(或者是APP使用者)发送的数据,通过HTTP的传输数据,把数据发送到Java后端,为什么要发送到Java后端呢,因为java后端主要是我们实现业务逻辑的地方,我们通过接收这些数据,我们就能进行相关的业务逻辑,我们为什么要封装这些数据呢,因为这些数据需要被处理,存储(保存到数据库),转发。

简单的理解:

请求的工具:postman/APipost

请求

(HttpServletRequest):获取请求数据响应

找到对应的安装包下载即可

请求的参数:

简单参数:

注意:如果方法形参名称与请求参数名称不匹配,可以使用@RequestParam完成映射。@RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。如果该参数是可选的,可以将required属性设置为false。

请求注解:HTTP请求相关的@注解是Spring框架的核心魔法 ,它们让HTTP请求的处理变得声明式、简洁、强大

1.声明式编程:告诉Spring"做什么",而不是"怎么做"

2.简化代码:自动完成繁琐的HTTP处理

3.类型安全:编译时检查,减少运行时错误

4.灵活配置:丰富的属性满足各种需求

5.统一管理:集中管理路由和参数处理

核心价值:让程序员专注于业务逻辑,而不是HTTP协议的细节处理!

请求映射注解:告诉Spring:哪个URL调用哪个方法

参数绑定注解:告诉Spring:请求数据放在哪

请求体注解:

实体参数:

简单实体对象:请求参数名与形参对象属性名相同,定义POjO接收即可

复杂实体对象:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数。

需要手动创建JavaBean

数组集合参数

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

集合:请求参数名与形参中集合变量名相同,通过@RequestParam绑定参数关系

日期参数

日期参数:使用@DateTimeFormat注解完成日期参数格式转换

JSON 参数

JSON参数:JSON数据键名与形参对象属性名相同,定义POJ0类型形参即可接收参数,需要使用@RequestBody标识

路径参数

路径参数:通过请求URL直接传递参数,使用{...)来标识该路径参数,需要使用@PathVariable获取路径参数

顾客(客户端) → 服务员(Controller) → 后厨(Service) → 菜品(响应)

  1. 顾客点餐(HTTP请求)

  2. 服务员接收订单(Controller接收请求)

  3. 服务员安排后厨做菜(Controller调用Service)

  4. 服务员上菜(Controller返回响应)

顾客(客户端) → 服务员(Controller) → 后厨(Service) → 菜品(响应)

  1. 顾客点餐(HTTP请求)

  2. 服务员接收订单(Controller接收请求)

  3. 服务员安排后厨做菜(Controller调用Service)

  4. 服务员上菜(Controller返回响应)

总结:Controller 的作用

Controller 是 Spring MVC 的交通警察

  1. 路由分发:把不同的HTTP请求分发给不同的处理方法

  2. 数据转换:把HTTP请求数据转换成Java对象

  3. 业务协调:组织Service层完成业务逻辑

  4. 响应封装:把处理结果转换成HTTP响应

  5. 异常处理:统一处理请求过程中的异常

没有 Controller:HTTP请求直接进入业务代码,代码混乱、难以维护、重复劳动。

有 Controller:清晰的层次结构、易于维护、代码复用、团队协作友好。

简单来说 :Controller 就是连接外部世界(HTTP)和你内部业务逻辑的桥梁

响应数据

@ResponseBody

类型:方法注解、类注解

位置:Controller方法上/类上

作用:将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为jSON格式响应说明:@RestController=@Controller +@ResponseBody;

分层解耦

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

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

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

控制反转:++InversionOfControl,简称IOC。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。++

依赖注入:++Dependency Injection,简称Dl。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。++

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

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

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

依赖注入的注解

@Autowired:默认按照类型自动装配。

如果同类型的bean存在多个:

@Primary

@Autowired +@Qualifier("bean的名称")

@Resource(name="bean的名称")

@Resource 与 @Autowired区别

@Autowired 是spring框架提供的注解,而@Resource是JDK提供的注解。

@Autowired 默认是按照类型注入,而@Resource默认是按照名称注入。

相关推荐
wenjianhai2 小时前
WebSocket调试工具---Apifox
网络·websocket·网络协议
llilian_162 小时前
b码授时卡 b码解码授时器对无人机领域的重要性 b码解码装置
网络·功能测试·单片机·无人机
guangshui5162 小时前
2034.Advanced IP scanner软件扫描 ubuntu的ip地址
网络协议·tcp/ip·ubuntu
提伯斯6462 小时前
Orangepi R1内置了哪些网卡驱动?(全志H3的板子)
linux·网络·wifi·全志h3
定偶3 小时前
TCP/IP协议栈深度解析技术
网络
无名的小三轮3 小时前
华为eNSP中USG6000防火墙web界面登录设置
网络·笔记·安全·web安全·华为
AI视觉网奇3 小时前
ue 5.5 c++ mqtt 订阅/发布 json
网络·c++·json
ArrebolJiuZhou3 小时前
03 rtp,rtcp,sdp的包结构
linux·运维·服务器·网络·arm开发
txinyu的博客3 小时前
解析muduo源码之 StringPiece.h
开发语言·网络·c++