Spring Boot Web请求响应

news2024/12/27 2:54:51
  • 在上一讲,学习了Spring Boot Web的快速入门以及Web开发的基础知识,包括HTTP协议以及Web服务器Tomcat等内容。
  • 基于SpringBoot的方式开发一个web应用,浏览器发起请求 /hello 后 ,给浏览器返回字符串 “Hello World ~”。
  • 运行启动类启动内嵌的Tomcat服务器之后就可以打开浏览器,然后在浏览器的地址栏当中输入访问路径,回车之后就可以访问到我们部署在Tomcat服务器当中的应用程序了。

  • 其实呢,是我们在浏览器发起请求,请求了我们的后端web服务器(也就是内置的Tomcat)。而我们在开发web程序时呢,定义了一个控制器类Controller,请求会被部署在Tomcat中的Controller接收,Controller接收到请求之后,对请求进行处理,处理完毕之后然后Controller再给浏览器响应一个对应的结果,响应一个字符串 “Hello World”。
  • 而客户端浏览器和服务器在进行数据传输的时候,是基于HTTP协议的,因为HTTP协议就规定了浏览器与服务器进行数据传输的规则,请求响应的过程中是遵循HTTP协议的。
  • 我们之前所编写的这个Controller程序,它仅仅是一个简单的Java类,它并没有实现任何的接口,也没有继承任何的类,那其实在Tomcat这类Web服务器中,是不识别我们自己定义的Controller程序的。
  • Tomcat虽然不识别我们所编写的Controller程序,但是Tomcat它是一个Servlet容器,它是支持Servlet规范的,所以在Tomcat中是可以识别Servlet程序的。

那我们所编写的XxxController 是如何处理请求的,又与Servlet之间有什么联系呢?

  • 在SpringBoot进行web程序开发时,它内置了一个核心的Servlet程序DispatcherServlet
  • 其实,在我们基于Spring Boot进行Web程序开发时,Spring Boot底层给我们提供了一个非常核心的Servlet程序DispatcherServlet(核心控制器 / 前端控制器)。

  • 而这个Dispatcher Servlet它就实现了Servlet规范当中的 Servlet接口,所以它是一个可以被Tomcat识别的Servlet程序。

  • 有了DispatcherServlet之后,前端浏览器发起的请求,都会先经过DispatcherServlet,由DispatcherServlet再将这个请求转发给后面的各个请求处理器Controller程序,由Controller程序再对请求进行处理,请求处理器Controller程序处理完请求之后再将处理完的结果返回给DispatcherServlet,最终再由DispatcherServlet给浏览器响应数据。
  • 通过该流程我们可以看出DispatcherServlet在Web请求当中是一个非常核心的一个类,所以这个类在Spring Boot当中我们称为核心控制器或者叫前端控制器。  

我们如何在Servlet程序当中来获取请求的参数呢?

  • 将来前端浏览器发起请求,会携带HTTP的请求数据,包括:请求行、请求头;
  • 请求到达Web服务器Tomcat之后,Tomcat服务器会负责解析这些请求数据,然后将解析后的请求数据会传递给 / 封装到Servlet程序的HttpServletRequest对象(请求对象)
  • 那也就意味着HttpServletRequest对象就可以获取到请求数据。
  • 接下来我们的应用程序可以从HttpServletRequest对象当中来获取请求数据,然后再对这个请求进行处理,处理完毕之后Tomcat服务器需要根据HTTP响应数据的格式给浏览器响应数据。

那Tomcat怎么就知道要给浏览器响应哪些数据呢?

  • 而Tomcat还给Servlet程序传递了一个参数HttpServletResponse。
  • 其实在Servlet程序当中,我们可以借助于另外一个对象HttpServletResponse(响应对象),通过这个对象,我们就可以给浏览器设置响应的数据。
  • 然后Tomcat就会根据我们在这个请求对象当中所设置的响应信息来响应数据给浏览器。

这就是Web应用程序整体的请求访问流程,对于我们来说,我们需要重点关注的就是我们所编写的Controller控制器程序。

在Controller程序当中,最重要的就是获取请求参数以及设置响应参数。

请求对象  HttpServeltRequest,它就是用来获取请求数据的。

响应对象  HttpServletResponse,它就是用来设置响应数据的。

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

BS架构:Browser/Server,浏览器/服务器架构模式。

  • 在这种架构模式当中,客户端只需要一个浏览器就行,应用程序所有的逻辑和数据都是存储在服务端的。
  • 浏览器很简单,我们系统已经安装好了,我们要访问这一类的应用,直接打开浏览器地址栏,输入地址就可以直接访问,非常方便。
  • 只要能通过浏览器所访问到的网站,都是BS架构。
  • 由于BS架构不需要单独的安装客户端,因此BS架构维护起来会更加方便一些,只需要维护服务端就可以。
  • 但由于所有的逻辑和数据都是存储在服务器端的,因此我们在通过浏览器端去访问服务器端的时候,它的加载速度就会收到网络带宽以及服务器的性能影响。
  • 我们在以后基于Java语言去开发Web应用程序的时候基本上都是BS架构。

CS架构:Client/Server,客户端/浏览器架构模式。

  • 在这种架构模式当中,我们是需要单独去下载对应的客户端的,而且不同的操作系统对应的客户端也不一样,Windows有Windows版的客户端,Mac有Mac版的客户端。
  • 所以在这种软件架构模式下,软件的开发以及维护会比较麻烦,但是体验不错,因为它有独立的客户端,有很多的逻辑以及数据它是可以在客户端进行处理的,速度会更快一点。
  • 请求:就是在Controller程序当中,我们要来获取各种各样的参数

  • 响应:就是在Controller程序当中,我们要来设置响应的数据

  • 分层解耦:就是将我们所编写的应用程序进行改造,完成代码的分层解耦

一. 请求

第一章请求,主要讲解如何接收页面传递过来的请求数据,以及各类请求参数的接收及封装(包括简单参数、实体参数、数组集合参数、日期参数、Json参数、路径参数等)

  • 先需要介绍一款功能强大的接口测试工具-Postman

介绍并安装

  • 当前最主流的开发模式就是前后端分离开发,在这种开发模式下,前端人员基于"接口文档",开发前端的工程 / 前端程序,后端人员基于"接口文档",开发后端的工程 / 程序。
  • 在后端工程的开发过程当中,我们开发完一个功能,就需要对这个功能接口来进行测试,而由于是前后端分离开发的,对我们后端技术人员来讲,在开发过程中,我们是没有前端页面的,那这个时候我们该怎么测试?

方式1:像之前SpringBoot入门案例中一样,直接使用浏览器。在浏览器中输入地址,测试后端程序。

  • 弊端:在浏览器地址栏中输入地址这种方式都是GET请求,如何我们要用到测试POST方式的请求怎么办呢?
    要解决POST请求,要测试POST方式的请求,需要程序员自己编写前端代码(比较麻烦)

  • 如果我们要测试POST方式的请求,这个时候就比较麻烦了,我们可能需要自己去编写前端的代码,然后再来进行后端的功能接口测试,这是比较繁琐的,此时我们就可以借助一款功能强大的接口测试工具-Postman,通过Postman就可以轻松的解决各种接口测试的需求了

注意:浏览器地址栏输入地址所发起的请求,全部都是GET请求。

方式2:使用专业的接口测试工具(Postman工具)

1.1.1 介绍

  • Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。
  • Postman原本是Chrome浏览器的一款插件,可以用来模拟浏览器来发起任何形式(如:get、post) 的HTTP请求,并且在请求的过程当中还可以很方便的去携带很多的请求参数,请求头等信息。常用于做接口的测试,也是后端开发工程师进行接口测试的首选工具。
  • 作用:常用于进行接口测试
  • 特征

    • 简单

    • 实用

    • 美观

    • 大方

  • 基于Postman也衍生出来了很多其他的工具,比如:Apipost,Apifox等,这些工具都是基于Postman衍生出来的。所以它们的使用方式也很简单,和Postaman基本一致。

 1.1.2 安装

 登录完成之后,可以创建工作空间:

 创建请求:

 界面介绍:

  • 第一栏要选择的是请求方式   后面要填写的就是URL请求路径(统一资源定位器)
  • 请求的参数  请求头的信息  请求体的信息
  • 点击send之后在下面的区域展示的就是响应回来的数据

  • 如果我们需要将测试的请求信息保存下来,就需要创建一个postman的账号,然后登录之后才  可以。
  • 如果想把本次请求测试完毕之后的请求的数据保存下来,可以点击右上角的Save或者直接按Ctrl+S就可以进入到保存的界面上面

    Request Name:请求的名字
  • 设置完请求的名字之后,在下面的这个位置需要来选择一个集合或者一个文件夹,来对这个请求进行归类处理。可以直接点击按钮来创建一个集合。

 

 

常见参数的接收及封装

1.2 简单参数

简单参数:在向服务器发起请求时,向服务器传递的是一些普通的请求数据。

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

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

相关文章

【Spring篇】IOC相关内容

🍓系列专栏:Spring系列专栏 🍉个人主页:个人主页 目录 一、bean基础配置 1.bean基础配置(id与class) 2.bean的name属性 3.bean作用范围scope配置 二、bean实例化 1.构造方法实例化 2.分析Spring的错误信息 3.静态工厂实例化 4.实例工厂 5.FactoryBean 三…

Python爬虫基础-如何获取网页源代码

Python爬虫基础-如何获取网页源代码 网络爬虫(Web Crawler),又称网页蜘蛛(Web Spider),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。爬虫程序根据一组特定的规则自动的访问网站,然后抓取网页上的内容,进…

布隆过滤器详解

介绍 本文全部代码地址 布隆过滤器是一种高效的数据结构,用于判断一个元素是否存在于一个集合中.它的主要优点是速度快,空间占用少,因此在需要快速判断某个元素是否在集合中的场合得到广泛引用. 布隆过滤器就是一个大型的位数组和几个不一样的无偏hash函数.所谓无偏就是能够…

boot-admin整合flowable官方editor-app源码进行BPMN2-0建模(续)

书接上回 项目源码仓库github 项目源码仓库gitee boot-admin 是一款采用前后端分离模式、基于SpringCloud微服务架构的SaaS后台管理框架。系统内置基础管理、权限管理、运行管理、定义管理、代码生成器和办公管理6个功能模块,集成分布式事务Seata、工作流引擎Flow…

ARM学习

计算机硬件基础* 文章目录 知识体系嵌入式系统分层应用开发和底层开发Linux内核五大功能ARM体系结构和接口技术底层知识的学习方法计算机基础知识 计算机的进制计算机的组成总线三级存储结构地址空间CPU原理概述 简述为什么地址总线为32bit的处理器的地址空间为4G简述CPU执行…

Java应用的优雅停机

一. 优雅停机的概念 优雅停机一直是一个非常严谨的话题,但由于其仅仅存在于重启、下线这样的部署阶段,导致很多人忽视了它的重要性,但没有它,你永远不能得到一个完整的应用生命周期,永远会对系统的健壮性持怀疑态度。…

面试被经常问的SQL窗口函数

面试题 有一张“学生成绩表”,包含4个字段:班级id、学生id、课程id、成绩。 问题1: 求出每个学生成绩最高的三条记录 问题2: 找出每门课程都高于班级课程平均分的学生 技术提升 技术要学会分享、交流,不建议闭门造…

图像去模糊:MSSNet 模型详解

本内容主要介绍实现单图像去模糊的 MSSNet 模型。 论文:MSSNet: Multi-Scale-Stage Network for Single Image Deblurring 代码(官方):https://github.com/kky7/MSSNet 1. 背景 单图像去模糊旨在从模糊图像(由相机抖…

ZLMediaKit在Windows上实现Rtmp流媒体服务器以及模拟rtmp推流和http-flv拉流播放

场景 开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并使用http-flv网页播放: 开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并使用http-flv网页播放_霸道流氓气质的博客-CSDN博客 上面讲…

OJ刷题 第十二篇

21308 - 特殊的三角形 时间限制 : 1 秒 内存限制 : 128 MB 有这样一种特殊的N阶的三角形&#xff0c;当N等于3和4时&#xff0c;矩阵如下&#xff1a; 请输出当为N时的三角形。 输入 输入有多组数据&#xff0c;每行输入一个正整数N&#xff0c;1<N<100 输出 按照给出…

从管理摆脱烦躁:几步打造优秀的仓库管理系统

伴随着物流行业的迅速发展&#xff0c;仓库管理成为了各个供应链环节的重要组成部分。为了更好地管理仓库&#xff0c;节约时间、提高效率&#xff0c;越来越多的企业开始使用仓库管理系统。那么&#xff0c;仓库管理系统是什么&#xff0c;为什么要用它呢&#xff1f;本篇文章…

春秋云境:CVE-2022-25578(文件包含)

目录 一、题目 二、蚁剑连接 一、题目 介绍&#xff1a; taocms v3.0.2允许攻击者通过编辑.htaccess文件执行任意代码 进入题目 访问URL&#xff0c;通过弱口令登录后台&#xff1a;admin/tao 进入后台 点击文件管理&#xff1a; 添加AddType application/x-httpd-php .jpg…

【技术】《Netty》从零开始学netty源码(四十一)之PoolChunk

PoolChunk 我们再回顾以下netty中与内存相关的类&#xff1a; 前面我们已经分析了PoolSubpag&#xff0c;本章我们分析PoolChunk,先看下它的属性值&#xff1a; 为了更好的理解这些属性值&#xff0c;我们结合它的构造函数来理解&#xff0c;具体的源码如下&#xff1a; 其…

网络通信之传输层协议

文章目录 传输层在网络通信中扮演的角色认识TCP协议TCP协议的多种机制确认应答(ACK)机制超时重传机制连接管理机制&#x1f53a;滑动窗口流量控制拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常处理 总结 传输层在网络通信中扮演的角色 上图是网络通信中五个模块&#xff…

信号完整性分析:关于传输线的三十个问题解答(三)

21.FR4 中 50 欧姆传输线的单位长度电感是多少&#xff1f;如果阻抗加倍怎么办&#xff1f;&#xff08;What is the inductance per length of a 50-Ohm transmission line in FR4? What if the impedance doubles?&#xff09; FR4 中的所有 50 欧姆传输线的单位长度电感约…

Vector - 常见设备I/O设置及使用

做过协议测试的朋友基本都会知道vector相关的设备&#xff0c;而且很多人都会去使用IO接口&#xff0c;但是并非所有的I/O接口都是一样的&#xff0c;然而他们到底是什么样的呢&#xff1f;这个需要我们去识别不同的设备&#xff0c;然后根据不同的设备去使用对应的IO配置&…

基于docker安装mongo

1.背景 基于业务的需求,部分数据量较大,基本一天的数据量都在1亿左右,关系型数据库已经满足不了了要求,所以更换为非关系型数据库.当然非关系型数据库的种类有很多,我们选择的是mongo,要想了解熟悉mongo,不能只做书面上的功夫,必须较强实际操作,才可以得心应手. 2. 安装mongo…

软件测试概念篇(上)

作者&#xff1a;爱塔居 专栏&#xff1a;软件测试​​​​​ 作者简介&#xff1a;大三学生&#xff0c;希望和大家一起好好学习&#xff01; 文章简介&#xff1a;简述了软件测试方面的基础概念 文章目录 目录 文章目录 一、软件测试概念 二、调试和测试的区别 三、软件测试和…

【linux】对于权限的理解

权限 Linux权限的概念用户之间的切换 Linux权限管理文件权限操作文件的人Linux文件默认权限的设置权限掩码 所属组/其他删除拥有者创建的文件文件拥有者、所属组的修改修改文件拥有者修改文件所属组一次性修改拥有者和所属组 目录的执行权限 Linux权限的概念 首先&#xff0c;…

ROS主机搭建NFS服务器,虚拟机通过挂载访问及修改主机文件

本文主要介绍在ROS主机中搭建NFS服务器&#xff0c;虚拟机&#xff08;从机&#xff09;通过nfs挂载的方式访问及修改主机中文件的方法 一、ROS主机NFS服务器搭建&#xff1a; 若机器人配有显示屏&#xff0c;此部分可直接在机器人上操作&#xff0c;否则&#xff0c;可通过SSH…