修改用户数据 服务器,浏览器是如何将用户数据发送到服务器的?
今天是刘小爱学习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,其实也可以转发到一个固定静态页面。无论转发多少次,浏览器请求路径没有变化,对浏览器来说就只有一次请求。所以转发属于服务器内部的跳转行为,与浏览器无关。转发过程中数据是共享的,也就是存储在域对象中的数据。最后
谢谢你的观看。
如果可以的话,麻烦帮忙点个赞,谢谢你。
举报/反馈
修改用户数据 服务器,浏览器是如何将用户数据发送到服务器的?相关推荐
- form提交后台注解拿不到数据_浏览器是如何将用户数据发送到服务器的?
今天是刘小爱学习Java的第89天. 感谢你的观看,谢谢你. 话不多说,开始今天的学习: 在学习之前,先思考如下问题: 对于浏览器来说: 如何将用户数据发送到服务器呢? 数据传输的格式是怎么样的呢? ...
- 手机邮箱接收邮件服务器如何,手机电子邮箱接收和发送的服务器地址是多少?...
电子邮件设置 注意事项:需开通手机上网业务 1.位置 主菜单→信息 → 电子邮件→邮件设置 → 模式: 1)开启 2)编辑(先编辑后开启) 2.编辑步骤 1) 传输设置: ① 设置名称:模式一 ② 传 ...
- java cookie能存到服务器_Cookie技术用于将会话过程中的数据保存到( )中,从而使浏览器和服务器可以更好地进行数据交互。(5.0分)_学小易找答案...
[单选题]下列选项中,用于对超链接和form表单中的action属性中设置的URL进行重写的方法是(5.0分) [判断题]安装好Tomcat后,就可以直接启动运行了,并不要先安装JDK.(5.0分) ...
- 案例:服务器输出字符数据到浏览器 || 乱码问题|| 案例:服务器输出字节数据到浏览器
2. 服务器输出字符数据到浏览器 步骤: 1. 获取字符输出流 2. 输出数据 * 注意: * 乱码问题: ...
- 阿里云服务器linux切换到root 用户,修改root密码
linux下 如何切换到root用户[同阿里云服务器操作] 默认安装完成之后并不知道root用户的密码,那么如何应用root权限呢? (1)sudo 命令 (建议用第2种方式) admin@ubun ...
- 【超详细Django网站开发过程4】便利店管理系统之——销售员如何获取顾客数据?即:读取数据库数据(浏览器请求数据——服务器返回数据)
一个便利店要想运转顺利,肯定要有合理的管理与分配,我们店里的销售人员,也应该成为管理员,拥有一个利用浏览器向服务端访问数据的权限,这篇文章带大家走一个销售员读取数据库客户数据的流程.学会了读取数据库, ...
- 域服务器批量修改用户密码,Windows域控制器批量创建用户
Windows域控制器批量创建用户 猫先生 • 2019 年 06 月 05 日 之前做过VDI的项目,一百多个桌面,需要一百多个用户,我刚开始手动创建了5个,觉得这不是IT人干的事,要高效.网上找了 ...
- 《jQuery与JavaScript入门经典》——第 1 章 动态Web编程简介 1.1理解Web服务器浏览器范式...
本节书摘来自异步社区<jQuery与JavaScript入门经典>一书中的第1章,第1.1节,作者:[美]Brad Dayley著,更多章节内容可以访问云栖社区"异步社区&quo ...
- 前端基础 互联网 DNS 服务器 浏览器
internet表示的意思是互联网,又称网际网络,根据音译也被叫做因特网(Internet).英特网,是网络与网络之间所串连成的庞大网络.这些网络以一组通用的协议相连,形成逻辑上的单一且巨大的全球化网 ...
最新文章
- 数据项目总结:王者荣耀总决赛预测!
- 大神教你如何给脚本写一个守护进程
- 从理论到实践: ORB-SLAM3 Initializer完全解读
- easyui messager 消息框 对话框
- java swing 外观框架_Swing外观框架BeautyEye使用
- mybatis 构造查询和联合子查询问题
- 【机器学习基础】一文归纳AI调参炼丹之法
- 细水长flow之NICE:流模型的基本概念与实现
- 爬虫实战:链接爬虫实战
- CentOS 8明年正式停止维护,以后再也不会有免费的RHEL了!
- Method-Swizzling实战-实现iOS原生网络请求性能采集
- 苹果电脑上使用linux环境变量,mac系统下修改环境变量
- 训练日志 2019.1.16
- 创建模板_在 GNOME 中创建文档模板 | Linux 中国
- Leetcode每日一题:41.first-missing-positive(缺失的第一个正数)
- nginx ---- 目录结构
- 东航期货模拟交易brockerid(期货公司的客户号)
- Acrobat Pro DC 教程,如何填写并签署 PDF 表格?
- java 高级工程师面试题集锦,持续更新~
- isee看图精灵下载
热门文章
- 小型超市管理系统毕业设计
- Mac电脑上Studio
- Palm面具模块卸载内置软件
- 【leetcode】【题解合集】
- E71软件测试工资,诺基亚手机软件测试基础知识、术语和流程
- AutoCAD二次开发(C#)完成后,如何实现CAD启动时自动加载dll(不必输入netload)?
- 第四篇,STM32中断控制编程
- Kali虚拟机桥接模式设置和虚拟网卡问题
- 游戏架构 游戏架构设计(15)
- redis查看某一个key的大小_redis查看某个key redis中key的操作命令 - Redis - 服务器之家...