form提交后台注解拿不到数据_浏览器是如何将用户数据发送到服务器的?

今天是刘小爱学习Java的第89天。

感谢你的观看,谢谢你。

话不多说,开始今天的学习:

e41305e3df82aad7a79308edd43aa9dc.png

在学习之前,先思考如下问题:

  • 对于浏览器来说:
  • 如何将用户数据发送到服务器呢?
  • 数据传输的格式是怎么样的呢?
  • 对于服务器来说:
  • 如何获取用户提交的数据呢?
  • 如何将结果响应给浏览器?

画一张图,对其做一个分析:

5cc3ba4b2554cf7505ac4c19e00d5e35.png

如果把servlet比作浏览器和服务器之间的一个通道,那么request和response也就是通道里的内容。

当然这样说明肯定不太准确,但是初学这样更好理解,今天就学一学这个request。

一、get、post请求

在学form表单的时候就知道了请求有get和post之分,当然请求方式不只有这两个,但目前主要接触这两种。

分析下浏览器发送请求到服务器的流程:

5b149f1b46e4b09d94f3cabb332db965.png

①登录页面

这是我在网上找的一个bootstrap登录页面,其本质也就是一个form表单,只不过加入了美化。

form表单标签有两个属性:

  • action:也就是表单提交后会跳转的路径,我这边设置的为“/getServlet”
  • method:也就是请求方式,我这边设置的是get请求。

详情见下图,模拟post请求时也就可以修改这两个属性。

a316acb607c6cd6025dceba88648080f.png

②浏览器地址

当点击登录提交按钮后,浏览器就会跳转action中对应的那个路径。其中get请求:会将参数拼接到url后面。

如何拼接的呢?

input标签中的name属性对应的值等于输入框中输入的值。

也就是:username=刘小爱。

③注解Servlet开发

使用注解开发的方式创建一个类GetServlet,其路径为“/getServlet”。

而在①中点击登录时会跳转“/getServlet”,所以会找到这个类,从而执行doGet()请求方法。

浏览器抓包观察请求报文

这边我又将①中表单请求方式改成post了,主要也是为了将get和post做一个总结对比。

d4279f2d51692aa265239ee8497bce34.png

一般是用谷歌浏览器,按F12进入开发调试,在Network选项中可以抓包。

①请求行

在get请求中参数是被拼接在url后面的。

而在post请求中是不拼接参数的。

正是因为如此,get请求不可以传输数据类较大的或者非文本数据,因为太长了url写不下了哈哈哈。

②请求头

以键值对的形式将信息传输给服务器。

③请求体

post请求的参数在请求体中,而get请求请求体为空。

二、request请求API

回到最先开始的几个问题,浏览器将数据传输给服务器了。

那么服务器如何获取这些数据呢?又如何进行处理呢?

在Java中一切都是对象,肯定有对应的类和对象。

1Request请求行

a637153fecbfb4c8ddfc787c6d4a7a3a.png

①getMethod()方法

其获取的就是浏览器发起的请求方式,例子中是post请求。

②getRequestURI()方法

其获取的就是浏览器访问的路径。

③getRemoteAddr()方法

这个是ip值,因为我的是本地电脑,所有就这样了。

④getProtocol()方法

获取的协议版本号,这里是HTTP/1.1。

2Request请求头

fdaadad0cb3ed3a6539baf8191dcf0ef.png

请求头中的信息是以键值对的形式传送给服务器的。

其中关于getHeader()方法中的参数:user-agent。

  • user:浏览器携带的用户操作系统。
  • agent:浏览器版本等信息。

老实说,这里面的信息就只能看懂一点点。

电脑系统为Win10,64位系统,后面还有能看出是用的谷歌浏览器访问,其它的很多信息暂时不懂。

3Request请求体

e69b7c093e4a72fc20242e15860d8dfd.png

①getParameter()方法

parameter,参数的意思。get请求的请求体为空,post请求参数需要从请求体中获取。

参数名为键值对中的键,参数值为键值对中的值。

这个是一对一的获取方式。

②getParameterValues()方法

上述的是一个参数名对应一个值,这个是对应多个值,比如复选框就可以选取多个值。

因为我用的是登录页面,只有用户名和密码。

但对该方法也要有一定的了解,该方法获取的值是一个数组,使用Arrays类可以将其转化成字符串再打印。

③getParameterMap()方法

看到Map第一反应就是键值对了,Map集合的两种遍历方式选择一种遍历打印即可。

三、request域对象和转发

1request域对象

如何理解域对象呢?

前面也说了,servlet相当于管道,request相当于管道里的内容。

而内容自然是需要装在容器里面的,这里的容器也就是request域对象。

和Java里的Map集合有一定的类似之处,就连API也很类似。

c1d4066d5c35ec7b9389ef8f5d3f0ca3.png

①setAttribute()

设定值,其中以键值对的形式存储数据。

②getAttribute()

获取值,根据key值获取对应的value值。

③removeAttribute()

移除值,删除对应的键值对。

以上就是几个常用的API,和Java中的集合很相似。

2request转发

什么叫转发呢?

通俗地理解就是:根据浏览器的路径,对应的servlet要处理请求,但是这个servlet不想处理,就可以转发给另一个servlet来处理。

像极了我小时候遇到不喜欢吃的菜了,就给我爸妈吃的样子……

举一个例子来说明:

59be8adb5a8f3a5cf5fd9697a305303b.png

根据浏览器中的路径,本来ForwardServlet要处理请求,但是它将请求转发给OtherServlet了,最后就由OtherServlet来处理。

那如何使用转发?其对应API为:

  • getRequestDispatcher("/otherServlet"),参数即为需要转发到的路径。
  • forward(),参数也就是请求和响应。

转发小结

  • 例子中的转发是转发到了另一个Servlet,其实也可以转发到一个固定静态页面。
  • 无论转发多少次,浏览器请求路径没有变化,对浏览器来说就只有一次请求。
  • 所以转发属于服务器内部的跳转行为,与浏览器无关。
  • 转发过程中数据是共享的,也就是存储在域对象中的数据。

最后

谢谢你的观看。

如果可以的话,麻烦帮忙点个赞,谢谢你。

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

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

相关文章

proxmoxve打造云桌面_微软云电脑Cloud PC曝光:配置一般还不便宜

光纤宽带的普及和提速、5G的兴起,让云电脑、云游戏、云手机等产品和应用红火起来。而微软也正在开发一款名为Cloud PC的云端Windows操作系统,并计划2021年正式推出。据报道,Cloud PC是由Azure云服务支撑,基于虚拟桌面打造的&#…

alpine linux图形界面_跟光磊学Linux运维-Linux入门与基本使用

认识Linux用户在安装CentOS8.2时,设置过root用户的密码,同时也创建了用户guanglei。其中root用户是系统自带的管理员账户,也被称为超级用户,root用户接近系统完整的控制能力,对系统损害几乎有无限的能力。运维人员在生…

休眠 嵌入式_内幕消息:嵌入式软件挤出最低功耗模式

低功耗运行仍然是各行业应用的关键驱动因素。随着睡眠模式的增加,电源管理突然从单纯的硬件问题转移到软件开发人员必须考虑的事情上。功耗模式的最简单应用是当系统空闲时,将其置于休眠状态。然而,今天的MCU提供多种低功耗模式,进…

cnn 验证集 参与训练吗_一个简单的零基础的机器学习教程之二,字母数字验证码识别...

一.前言基于前面我发的贴子 土味程序员:一个简单的零基础的机器学习教程,Pytorch搭建Faster R-CNN目标检测平台​zhuanlan.zhihu.com一个非常震撼的目标检测的例子。上个帖子从环境安装到调试代码再到图片检测视频检测一个详细的教程,今天我来…

activiti 文档_免费、开源、多平台的PDF文档处理软件——PDFsam Basic

今天给大家推荐的是一款免费、开源、多平台支持的PDF文档处理软件——PDFsam BasicPDFsam Basic是为普通用户提供的免费开源解决方案,提供了PDF文档拆分、合并、混合、提取页面和旋转等等功能。01. 文档分割PDFsam Basic可以通过给定页码、书签级别,把PD…

@data注解不生效_你说啥什么?注解你还不会?

点击蓝色字免费订阅,每天收到这样的好信息前言:最近有不少粉丝关注本公众号。并且我已经成功开通了流量主同时会赚一点点广告费,我打算每个月把这部分钱拿出来给大家买点书刊,算是给大家一点福利吧。大家想买什么书扫描下方的加他拉你加群。最后,非常感谢大家的关注…

yearning 2. 部署_对于企业来说,在选择协同办公系统的时候,选择私有化部署的数据安全一些,还是使用云服务器比较安全?...

当然是私有化部署!因为它除了安全,还有个性化~私有化部署,简单理解就是企业自己购买或租赁服务器,或者由服务商提供免费的云资源,然后将整个系统部署在企业自有的服务器上。采用这种方式,企业就不用担心自家…

numpy 平方_Numpy的终极备忘录

作者|Rashida Nasrin Sucky 编译|VK 来源|Towards Data Science Python是开源的。对于使用python的数据科学家来说,Numpy这个库是必不可少的。其他一些基本的库,如Pandas,Scipy是建立在Numpy的基础上。所以我决定做一份备忘录。这里我包括了到…

linux HZ 值_Linux的serial串口控制台

本人大多数情况都是在调试服务器大量的linux服务器,很多情况下也不没有必要专门准备KVM(keyboard, video, mouse),甚至有些机器根本就没有显示器接口。如何调试的?闲来无事,分享一下。有些人说“ 给我个Lin…

nginx文件系统大小_详解Nginx系列

1.Nginx特点Nginx是一个事件驱动架构,而非传统过程驱动架构。具有内存占用低,当并发连接大时,能够预测内存使用率。Nginx改变了传统的web服务器体系架构,提高了响应速度,起初Nginx开发的目标是实现10倍以上的性能&…

不可用于python编程开发的是_Python编程语言可做而不应做的一些事是什么_Python视频_Python视频教程_编程语言_课课家...

在 -5 ~ 256 之间的整型数值可以进行互换 当我在考虑这个能用在什么地方的时候,我有点迷茫了。撇开这点,你在此之前知道 Python 中的数字是可以改变其实际含义的吗?之所有会有这种情况,是因为 Python 解释器为 -5 ~ 256 之间的每一…

iphone7尺寸_iPhone 12 mini、12 Pro Max真机对比图赏:尺寸直观感受下

11月6日消息,等待多时,苹果iPhone 12 mini、iPhone 12 Pro Max将于今晚21点正式开启预定,11月13日发售。iPhone 12 mini是苹果尺寸最小、最轻薄的5G手机,而iPhone 12 Pro Max则是综合实力最强大,拍照最好的iPhone。赶在…

人脸识别错误代码437是什么意思_lol手游repeat ready check fails什么意思 解决攻略大全...

导读 lol手游repeat ready check fails什么意思?在日服内出现英文的错误代码,这两种语言的差异,会让国服玩家变得越来越混乱,想要解决问题,还是一如既往的得弄清楚代码内提示的内容是什么... lol手游repeat ready chec…

matlab求傅里叶级数展开式_连续时间的傅里叶级数

如果信号x(t)是周期信号,那么对于所有t,存在一个最小正数T,使得x(t)x(tT)其中T为这个周期信号的最小正周期。根据周期函数的周期性:x(t)x(tN*T)(N为整数)称为这个信号的基波频率周期信号x(t)也可以用周期复指数信号表示则因为x(t)是周期信号&…

delphi chart 曲线实时_发展学生曲线跑能力的体育游戏及运用研究

不想错过精彩的推送?戳左上角蓝字“体育教师大本营”关注并点击右上角●●●菜单栏选择“设置⭐️标”或“置顶公众号”每天早上7:00,体委伴您成长 一、曲线跑教材跑是人类在日常生活社会交往、生产劳动中的基本活动能力之一,从一定程度上反映…

拖拽的方式使用qbuttongroup_【无机纳米材料科研制图——Photoshop 0402】PS使用选框工具修改图片/图层...

此篇,我们来分享使用PS的选框修改图片。一、栅格化图形。1)同时选中两个图层。首先,回到上一篇中图片相互遮挡的状态。在上一篇中,我们通过调整图层的上下位置,避免了遮挡的情况,但有时候只通过调整图层的上…

pagerank数据集_从小白视角理解数据挖掘十大算法

关注上方“数据挖掘工程师”,选择星标,关键时间,第一时间送达!作者 | 雪山飞猪链接 | https://www.cnblogs.com/chenqionghe/p/12301905.html编辑 | 深度学习这件小事本文仅作技术交流,如有侵权,请联系删除…

filter过滤器_JavaWeb之 Filter(过滤器)

FIlter作用过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的。当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter“放行”,那么会继承执行用…

css两张图片怎么合在一起_web前端入门到实战:纯CSS实现两个球相交的粘粘效果...

这是一个纯粹利用CSS所做出来的效果,这个效果说穿了就是一个图像处理的原理,做法跟Photoshop里头的几乎一模一样,只是一个用图层和色版来制作,一个则是用CSS(把div当成图层思考就好了)。从PhotoShop开始一开…

java 位运算取8位_Java 9 AOT 试用:仅支持 64 位 Linux和java.base 模块编译

Java 9 引入了 aot 编译方式,能够将 class 文件直接编译成可执行二进制文件。目前 Java 9 的 early access 版本已经提供了编译工具,让我们来看看它的功能吧。注意:按照 JEP 295 描述,目前版本的 AOT,仅支持 64 位 Lin…