【JavaWeb】SpringBootWeb请求响应

news/2024/10/3 23:28:36

前言

在上一次,我们开发了springbootweb的入门程序。 基于SpringBoot的方式开发一个web应用,浏览器发起请求 /hello 后 ,给浏览器返回字符串 “Hello World ~”。

其实呢,是我们在浏览器发起请求,请求了我们的后端web服务器(也就是内置的Tomcat)。而我们在开发web程序时呢,定义了一个控制器类Controller,请求会被部署在Tomcat中的Controller接收,然后Controller再给浏览器一个响应,响应一个字符串 “Hello World”。 而在请求响应的过程中是遵循HTTP协议的。

但是呢,这里要告诉大家的时,其实在Tomcat这类Web服务器中,是不识别我们自己定义的Controller的。但是我们前面讲到过Tomcat是一个Servlet容器,是支持Serlvet规范的,所以呢,在tomcat中是可以识别 Servlet程序的。 那我们所编写的XxxController 是如何处理请求的,又与Servlet之间有什么联系呢?

其实呢,在SpringBoot进行web程序开发时,它内置了一个核心的Servlet程序 DispatcherServlet,称之为 核心控制器。 DispatcherServlet 负责接收页面发送的请求,然后根据执行的规则,将请求再转发给后面的请求处理器Controller,请求处理器处理完请求之后,最终再由DispatcherServlet给浏览器响应数据。

那将来浏览器发送请求,会携带请求数据,包括:请求行、请求头;请求到达tomcat之后,tomcat会负责解析这些请求数据,然后呢将解析后的请求数据会传递给Servlet程序的HttpServletRequest对象,那也就意味着 HttpServletRequest 对象就可以获取到请求数据。 而Tomcat,还给Servlet程序传递了一个参数 HttpServletResponse,通过这个对象,我们就可以给浏览器设置响应数据。

那上述所描述的这种浏览器/服务器的架构模式呢,我们称之为:BS架构。

• BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。

下面我们主要就围绕着:请求、响应进行。主要包含三个部分:

  • 请求
  • 响应
  • 分层解耦

1. 请求

1.1. 简单参数

在Springboot的环境中,对原始的API进行了封装,接收参数的形式更加简单。 如果是简单参数,参数名与形参变量名相同,定义同名的形参即可接收参数。

@RestController
public class RequestController {// http://localhost:8080/simpleParam?name=Tom&age=10// 第1个请求参数: name=Tom   参数名:name,参数值:Tom// 第2个请求参数: age=10     参数名:age , 参数值:10//springboot方式@RequestMapping("/simpleParam")public String simpleParam(String name , Integer age ){//形参名和请求参数名保持一致System.out.println(name+"  :  "+age);return "OK";}
}

如果方法形参名称与请求参数名称不一致,可以使用Spring提供的@RequestParam注解完成映射,在方法形参前面加上 @RequestParam 然后通过value属性执行请求参数名,从而完成映射。代码如下:

@RestController
public class RequestController {// http://localhost:8080/simpleParam?name=Tom&age=20// 请求参数名:name//springboot方式@RequestMapping("/simpleParam")public String simpleParam(@RequestParam("name") String username , Integer age ){System.out.println(username+"  :  "+age);return "OK";}
}

注意事项:

@RequestParam中的required属性默认为true(默认值也是true),代表该请求参数必须传递,如果不传递将报错,可以设置@RequestParam(name = "name", required = false)

1.2. 实体参数

1.3. 数组集合参数

1.4. 日期参数

1.5. JSON参数

1.6. 路径参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/44497.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

llm-universe - 1

Smiling & Weeping---- 难怪春迟迟不来,原来是我把雪一读再读一、大型语言模型(LLM)理论简介 1 大型语言模型(LLM)的概念 大语言模型(LLM,Large Language Model),也称大型语言模型,是一种旨在理解和生成人类语言的人工智能。 LLM 通常指包含数百亿(或更多)参数…

Git学习记录v1.0

1、常用操作git clone git config git branch gitt checkout git status git add git commit git push git pull git log git tag1.1 git clone 从git服务器拉取代码 git clone https://gitee.com/xxx/studyJava.git1.2 git config 配置开发者用户名和邮箱 git config user.nam…

魔法披风

或许我的故事即将迎来结局了吧頑張って

17岁中专女生,闯进全球数学竞赛12强

今年阿里的数学竞赛结果出来了,在榜单的前列包含一个 17 岁的中专女生。 在 2018 年时,阿里巴巴达摩院发起了一个国际数学竞赛,基本每年举办一次,参赛不设报名条件,向全球所有数学爱好者开放,竞赛由阿里创始人马云发起。入口:https://damo.alibaba.com/alibaba-global-m…

【Nginx】Nginx部署前端静态资源

打包部署 我们的前端工程开发好了,但是我们需要发布,那么如何发布呢?主要分为2步:前端工程打包 通过nginx服务器(点击下载Nginx)发布前端工程1 前端工程打包 接下来我们先来对前端工程进行打包 我们直接通过VS Code的NPM脚本中提供的build按钮来完整,如下图所示,直接点…

BUUCTF-Misc(151-160)

[DDCTF2018]第四扩展FS binwalk提取一下然后提取出来一个加密压缩包,密码就在图片的备注里Pactera提取出来是一个文本字频统计得到flagflag{huanwe1sik4o!}Beautiful_Side 010editor打开,发现一个png文件,我们提取出来发现是半张二维码然后打开QRazyBox - QR Code Analysis …

docker阶段01 容器化概述, Docker介绍, 安装, 镜像特性和操作, 容器操作

1.容器化概述容器: 泛指可以存放其他物品的一种容纳工具,部分和完全封闭的 单台服务器运行多个环境程序假如让不同的环境程序运行在不同环境中 容器中怎么实现: 1.通过虚拟化实现,如图,通过kvm相当于创建了多个独立的操作系统2.通过容器实现,依赖于宿主机操作系统,更省资源…

FASTAPI从入门到进阶

fastapi框架fastapi,一个用于构建 API 的现代、快速(高性能)的web框架。 fastapi是建立在Starlette和Pydantic基础上的,Pydantic是一个基于Python类型提示来定义数据验证、序列化和文档的库。Starlette是一种轻量级的ASGI框架/工具包,是构建高性能Asyncio服务的理性选择。…