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默认是按照名称注入。

相关推荐
heimeiyingwang4 分钟前
【架构实战】可观测性体系:从监控到全链路追踪
网络·数据库·架构
小茴香35325 分钟前
HTTP缓存
网络协议·http·缓存·面试
weixin_511840471 小时前
2026年5月4日 OCS技术方案路线选择与优劣深度调研报告
网络·人工智能
绝知此事1 小时前
Netty实战:从零构建高性能TCP通信服务(含心跳检测)
java·网络·spring boot·网络协议·tcp/ip
小初生ZLD2 小时前
AI开发者的网络卡点:Anthropic连接超时实战避坑
网络
Bobolink_2 小时前
跨境网络中“高延迟”问题的技术成因与解决路径
网络·网络优化·跨境网络
呉師傅2 小时前
UPS滴滴告警!如何测量UPS电池内阻【UPS学习】
运维·服务器·网络·学习·电脑
@insist1233 小时前
信息安全工程师-工控安全产品体系与行业实践全解析
网络·安全·软考·信息安全工程师·软件水平考试
段一凡-华北理工大学3 小时前
2026 高炉炼铁智能化技术全景与演进路径~系列文章03:高炉工业数据治理标准化与全生命周期血缘体系
网络·人工智能·高炉炼铁·工业智能体·炉温监测·高炉智能化
tedcloud1233 小时前
wifi-densepose部署教程:构建无线人体感知系统
服务器·javascript·网络·typescript·ocr