后端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。这样前端只需要对这种格式的数据进行解析就可以。

相关推荐
shehuiyuelaiyuehao1 小时前
1计算机是如何工作的
java·计算机网络
letisgo52 小时前
JAVA 高级进阶07篇《@Transactional失效的8个场景:代理机制到传播行为》
java·面试·transactional·spring事务·aop动态代理
水域安全老周2 小时前
水趣钓鱼救生衣专利拆解:两级锁紧如何解决落水人衣分离
java·前端·网络
三8442 小时前
Java 模板注入(FreeMarker) · 02 · 模板引擎与 FreeMarker 语法
java·开发语言·web安全·freemarker
暮雨哀尘2 小时前
Java 基础练习(一):创建类并调用对象
java·开发语言
想要入门的程序猿3 小时前
回调函数学习
java·网络·学习
EatFan3 小时前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app
泡海椒3 小时前
动态代理核心原理:JQuick-Java接口规则自动生成机制解析
java·开发语言·python
步行cgn3 小时前
Spring 启动报错:BeanFactory not initialized 的原因与解决
java·python·spring
步行cgn3 小时前
Spring 报错:No bean class specified on bean definition 的原因与解决
java·后端·spring