您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

浏览器是如何将用户数据发送到服务器的?

时间:2020-07-13 09:26:38  来源:  作者:

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

感谢你的观看,谢谢你。

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

浏览器是如何将用户数据发送到服务器的?

 

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

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

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

浏览器是如何将用户数据发送到服务器的?

 

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

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

一、get、post请求

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

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

浏览器是如何将用户数据发送到服务器的?

 

①登录页面

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

form表单标签有两个属性:

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

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

浏览器是如何将用户数据发送到服务器的?

 

②浏览器地址

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

如何拼接的呢?

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

也就是:username=刘小爱。

③注解Servlet开发

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

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

浏览器抓包观察请求报文

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

浏览器是如何将用户数据发送到服务器的?

 

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

①请求行

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

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

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

②请求头

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

③请求体

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

二、request请求API

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

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

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

1Request请求行

浏览器是如何将用户数据发送到服务器的?

 

①getMethod()方法

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

②getRequestURI()方法

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

③getRemoteAddr()方法

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

④getProtocol()方法

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

2Request请求头

浏览器是如何将用户数据发送到服务器的?

 

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

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

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

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

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

3Request请求体

浏览器是如何将用户数据发送到服务器的?

 

①getParameter()方法

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

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

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

②getParameterValues()方法

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

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

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

③getParameterMap()方法

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

三、request域对象和转发

1request域对象

如何理解域对象呢?

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

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

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

浏览器是如何将用户数据发送到服务器的?

 

①setAttribute()

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

②getAttribute()

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

③removeAttribute()

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

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

2request转发

什么叫转发呢?

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

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

举一个例子来说明:

浏览器是如何将用户数据发送到服务器的?

 

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

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

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

转发小结

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

最后

谢谢你的观看。

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



Tags:浏览器   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一. 配置yum源在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repovim /etc/yum.repos.d/google-chrome.repo按i进入编辑模式写入如下内容:[google-chrome]name=googl...【详细内容】
2021-12-23  Tags: 浏览器  点击:(7)  评论:(0)  加入收藏
Safari是苹果在iPhone和iPad上的默认网络浏览器。虽然我们天天都在使用,但是,你是否深入研究了Safari的所有功能和设置?"无痕浏览"、"阅读器"视图和下载文件等标准选项只是其...【详细内容】
2021-12-16  Tags: 浏览器  点击:(21)  评论:(0)  加入收藏
大家好,我是Stark-C。油猴简介【油猴】一款免费的浏览器扩展和最为流行的用户脚本管理器,它是一个附加组件(扩展程序),让用户安装一些脚本使大部分HTML为主的网页改变得更方便易...【详细内容】
2021-12-13  Tags: 浏览器  点击:(46)  评论:(0)  加入收藏
年末,又到了各大厂商盘点年度最佳的时候了。不过让世超感到意外的是 Google 竟然给自己 Chrome 的插件,做了一个 2021 年精选集锦,挑选出了 13 款今年最热门的 Chrome 插件。...【详细内容】
2021-12-13  Tags: 浏览器  点击:(19)  评论:(0)  加入收藏
当我们浏览知乎、Youtube、贴吧、CSDN等等,总会遇到服务商一些广告;复制文章的时候,剪切板总是自带一些版权信息;还有一些网页配色很亮,眼睛看着很不舒服。反正就是各种不爽。给...【详细内容】
2021-12-08  Tags: 浏览器  点击:(27)  评论:(0)  加入收藏
谷歌访问助手插件是专门针对chrome谷歌浏览器而开发的一款访问插件,可以为谷歌搜索,谷歌chrome商店,gmail邮箱提供加速服务,解决打不开的问题。这款插件可以帮助我们在使用谷歌...【详细内容】
2021-12-03  Tags: 浏览器  点击:(13)  评论:(0)  加入收藏
微软似乎正努力增强 Edge 浏览器和网页端 Office 之间的整合联动。Reddit 社区用户 u/Leopeva64-2指出,Edge Canary 的最新版本在标签的右键菜单中有一个新选项。如果你在窗...【详细内容】
2021-11-11  Tags: 浏览器  点击:(35)  评论:(0)  加入收藏
IOS15推送后,Safari也支持扩展了,这里给大家推荐几款Safari扩展软件,希望对你手机使用有所帮助。 扩展功能 IOS15可以通过设置——Safari浏览器——更多扩...【详细内容】
2021-11-08  Tags: 浏览器  点击:(135)  评论:(0)  加入收藏
一、判断是否IE浏览器(支持判断IE11与edge)function IEVersion() {var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串var isIE = userAgent.indexOf("comp...【详细内容】
2021-11-02  Tags: 浏览器  点击:(40)  评论:(0)  加入收藏
作为当今最差的浏览器,虽说IE即将推出历史的舞台,但是因为项目需要还是需要支持。那么必须判断是否是IE,如果是IE,需要做些特殊处理。document.documentMode 是IE特有的属性,可以...【详细内容】
2021-10-25  Tags: 浏览器  点击:(36)  评论:(0)  加入收藏
▌简易百科推荐
面向对象的特征之一封装 面向对象的特征之二继承 方法重写(override/overWrite) 方法的重载(overload)和重写(override)的区别: 面向对象特征之三:多态 Instanceof关键字...【详细内容】
2021-12-28  顶顶架构师    Tags:面向对象   点击:(2)  评论:(0)  加入收藏
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  CF07    Tags:Java   点击:(3)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Java架构师之路    Tags:JAVA   点击:(5)  评论:(0)  加入收藏
大家好!我是老码农,一个喜欢技术、爱分享的同学,从今天开始和大家持续分享JVM调优方面的经验。JVM调优是个大话题,涉及的知识点很庞大 Java内存模型 垃圾回收机制 各种工具使用 ...【详细内容】
2021-12-23  小码匠和老码农    Tags:JVM调优   点击:(11)  评论:(0)  加入收藏
前言JDBC访问Postgresql的jsonb类型字段当然可以使用Postgresql jdbc驱动中提供的PGobject,但是这样在需要兼容多种数据库的系统开发中显得不那么通用,需要特殊处理。本文介绍...【详细内容】
2021-12-23  dingle    Tags:JDBC   点击:(13)  评论:(0)  加入收藏
Java与Lua相互调用案例比较少,因此项目使用需要做详细的性能测试,本内容只做粗略测试。目前已完成初版Lua-Java调用框架开发,后期有时间准备把框架进行抽象,并开源出来,感兴趣的...【详细内容】
2021-12-23  JAVA小白    Tags:Java   点击:(11)  评论:(0)  加入收藏
Java从版本5开始,在 java.util.concurrent.locks包内给我们提供了除了synchronized关键字以外的几个新的锁功能的实现,ReentrantLock就是其中的一个。但是这并不意味着我们可...【详细内容】
2021-12-17  小西学JAVA    Tags:JAVA并发   点击:(11)  评论:(0)  加入收藏
一、概述final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。...【详细内容】
2021-12-15  唯一浩哥    Tags:Java基础   点击:(17)  评论:(0)  加入收藏
1、问题描述关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。2、解决方案这次其实是碰到了一个问题,一般的情况...【详细内容】
2021-12-15  软件老王    Tags:logback   点击:(19)  评论:(0)  加入收藏
本篇文章我们以AtomicInteger为例子,主要讲解下CAS(Compare And Swap)功能是如何在AtomicInteger中使用的,以及提供CAS功能的Unsafe对象。我们先从一个例子开始吧。假设现在我们...【详细内容】
2021-12-14  小西学JAVA    Tags:JAVA   点击:(21)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条