后端Web核心之请求响应

目录

1.概述

2.接收请求

简单参数和实体参数

数组集合参数

日期参数和JSON参数

路径参数

总结

3.返回响应


1.概述

Web请求和响应是HTTP协议中的核心概念,它们是客户端(通常是浏览器)与服务器之间通信的基础。

浏览器发起请求后,由Controller处理再发送响应数据给浏览器。而我们自己写的controller程序,由于不支持tomcat中的java规范,因此tomcat其实是不能识别的,也就不能运行。

但是Tomcat支持servlet,springboot底层提供了一个非常核心的servlet,就是dispatcherServlet,它实现了servlet接口,那么前端发起的请求都会先经过它,再由它把这个请求转发给各个controller程序,controller处理后的结果再返回给dispatcherServlet,再发送给浏览器。它非常重要,因此叫做前端(核心)控制器

tomcat解析完浏览器的http请求,会封装在HttpServletRequest对象中,而发送的请求会封装在HttpServletResponse对象中。

这种架构模式就叫做BS(browser/server)架构:客户端只需要浏览器,应用程序的逻辑操作和数据都存储在服务端。通过浏览器访问的网站都是BS架构,比如京东、淘宝等

另外一种模式叫做CS(client/server)架构:就是需要安装的客户端,比如QQ、微信等

以上是Web应用程序整体的访问流程,大部分都不需要我们去管,因此要重点关注需要我们自己编写的Controller程序,其中最重要的就是获取请求参数设置响应数据

2.接收请求

简单参数和实体参数

由于通过localhost我们只能发送get请求,如果要发送post或其他形式的请求就需要去编写前端程序,这样是比较繁琐的,因此我们用postman(Apipost、Apifox差不多用法)工具去测试后端的功能接口,它可以指定请求形式、传递参数、请求头和请求体等。

**简单参数:**对于简单参数,无论是什么请求形式,只需要保证请求的参数名和controller方法中的形参名保持一致就都可以接收成功。

即使不一致,也可以通过注解@RequestParam将参数名name映射到username上,从而完成参数的接收。

**实体参数:**简单参数在少的情况下比较方便,但如果要传递十几二十个参数呢,此时就会变得很麻烦,因此考虑把这些参数都封装到一个实体类中,传递这个实体类即可。

以上是简单实体参数的封装,对于对象中含有多个属性(复杂实体参数)的,通过address.privince这样的方式一个一个进行封装。

数组集合参数

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

另一种方式是使用集合参数:用注解RequestParam绑定参数关系

日期参数和JSON参数

日期参数: 用注解DateTimeFormat注解完成日期参数格式转换(指定日期的格式)

**JSON参数:**JSON数据是放在请求体中携带到服务端的,因此要用post请求。JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody标识

路径参数

通过请求URL直接传递参数,使用{...}来标识该路径参数,需要使用@PathVariable获取路径参数,其中id是动态的,以便于访问不同的路径。

对于多个路径参数,就多写一个参数就可以了。

总结

3.返回响应

实际上,return的这部分(hello world)就是响应数据。这依赖于一个核心注解ResponseBody,它被包含在RestController中

这些Controller中的public对外暴露的方法被称为功能接口,RequestMapping后面就是它的请求路径(/hello)。而实际项目开发需要的开发文档 就是描述这些接口的请求路径、请求参数和响应数据。

但是,这些接口的返回的数据多种多样,前端不可能一个一个的对这些数据进行解析。因此我们用一个通用的实体对象(result)来接收,最后所有的Controller方法都给前端返回这个result。这样前端只需要对这种格式的数据进行解析就可以。

相关推荐
m0_5719575834 分钟前
Java | Leetcode Java题解之第543题二叉树的直径
java·leetcode·题解
魔道不误砍柴功3 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_2343 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
闲晨3 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
种树人202408193 小时前
如何在 Spring Boot 中启用定时任务
spring boot
测开小菜鸟4 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
P.H. Infinity5 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天5 小时前
java的threadlocal为何内存泄漏
java
caridle5 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
^velpro^6 小时前
数据库连接池的创建
java·开发语言·数据库