【Request】全面总结并理解request
HTTP(Hyper Text Transfer Protocol ,超文本传输协议),定义了客户端与服务器端通信时的数据格式
请求消息数据格式:
请求行——格式:
请求方式 请求url 请求协议/版本
,比如:GET /login.html HTTP/1.1
关于请求方式:HTTP协议有7种请求方式,常用的有两种:
▶ GET:请求参数在请求行中(url中);请求的url有长度限制;不太安全
▶ POST:请求参数在请求体中;请求的url没有长度限制;相对安全请求头——格式:
键值对
。是客户端浏览器告诉服务器的信息。
关于几个重要的请求头键/值:
▶ User-Agent:浏览器告诉服务器"我是哪个版本的浏览器"。这样服务器才能"对症下药",解决浏览器兼容性问题
▶ Referer:告诉服务器"我的请求的来源"。这被用于 防盗链 和 统计工作。请求空行——格式:
就是个空行
。分割了 请求头 和 请求体请求体——传递的信息。POST方式有请求体,GET方式没有。流的形式获取。
request
▶ request对象和response对象的原理
- 服务器根据url的资源路径(两次映射,或注解一步到位)对应到相应的Servlet实现类,通过反射机制做出Servlet对象;
- 服务器也会自动创建出Request和Response对象——它们被传递给Servlet对象的service方法,service方法自动调用;
- request对象用来获取请求消息;response对象用来设置响应消息。
▶ request对象继承体系结构
ServletRequest 接口
↑继承
HttpServletRequest 子接口
↑ 实现
org.apache.catalina.connector.RequestFacade 实现类
▶ request功能:
------------------------------------------ 获取请求行数据 --------------------------------------------------
demo请求行: GET /loli/demo?name=Alice HTTP/1.1getMethod() 获取请求方式: GET
getContextPath() 获取虚拟目录(★): /loli
getServletPath() 获取资源路径(Servlet路径): /demo
getQueryString() 获取get方式的请求参数: name=Alice
getRequestURI() 获取请求URI (★): /loli/demo
getRequestURL() 获取请求URL: http://localhost:8080/loli/demo
getProtocol() 获取协议及版本: HTTP/1.1
getRemoteAddr() 获取客户机的IP地址 0:0:0:0:0:0:0:1------------------------------------------ 获取请求头数据 --------------------------------------------------getHeader(String name) 通过请求头的名称获取值(★)
getHeaderNames() 获取所有的请求头名称(返回值是Enumeration<String>枚举类型(用hasMoreElements()和nextElement()方法进行迭代)) ------------------------------------------ 获取请求体数据 --------------------------------------------------只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
步骤: 1.获取流对象(字符流/字节流) 2.再从流对象中拿数据getReader() 返回类型BufferedReader,获取的当然是字符输入流
getInputStream() 返回类型ServletInputStream,获取字节输入流(可以操作所有类型的文件)
▶ request其他功能:
------------------------------------------ 获取请求参数 --------------------------------------------------上面在获取请求参数时: GET用的是getQueryString()方法,POST用的是getReader()/getInputStream()
下面给出通用方法: String getParameter(String name) 根据key获取value (★)
String[] getParameterValues(String name) 根据key获取value数组
Enumeration<String> getParameterNames() 获取所有key
Map<String,String[]> getParameterMap() 获取所有key-value对小插曲: tomcat8版本以下,获取POST方式的请求参数会出现中文乱码问题
解决: request.setCharacterEncoding("utf-8"); 这个字符集和html页面使用的字符集相对应。------------------------------------------ 请求转发 -------------------------------------------------------1.通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
2.使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response) 理解: "请求转发"一种在服务器内部的资源跳转方式;
特点: 资源路径不变; 只能转发到当前服务器内部资源中;
本质: 一次请求,访问到了多个资源(★)链式写法(★): request.getRequestDispatcher("/另一个资源路径").forward(request, response);------------------------------------------ 共享数据 -------------------------------------------------------域对象: 一个有作用范围的对象,可以在范围内共享数据
request域: 一次请求的范围。一般用于在"请求转发"的多个资源中共享数据setAttribute(String name,Object obj)
getAttribute(String name)
removeAttribute(String name)-------------------------------------- 获取ServletContext对象 ---------------------------------------------
getServletContext()
▶ 最常用的方法
request的功能:
- 获取请求行(getContextPath、getServletPath、getRequestURI,getQueryString)
- 获取请求头(getHeader)
- 获取请求体(getReader / getInputStream)
request其他功能:
- 获取请求参数(getParameter)
- 请求转发(request.getRequestDispatcher("/另一个资源路径").forward(request, response))
- 共享数据(setAttribute / getAttribute)
- 获取ServletContext对象(getServletContext)
End ♬
by a Lolicon ✪
【Request】全面总结并理解request相关推荐
- 对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)--转
出处:http://blog.csdn.net/xxd851116/archive/2009/06/25/4296866.aspx [前面的话] 在网上经常看到有人对request.getSessio ...
- 理解request.getSession(boolean create)
为什么80%的码农都做不了架构师?>>> [前面的话] 在网上经常看到有人对request.getSession(false)提出疑问,我第一次也很迷惑,看了一下J2EE1.3 ...
- 对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)
本文属于本人原创,转载请注明出处:http://blog.csdn.net/xxd851116/archive/2009/06/25/4296866.aspx [前面的话] 在网上经常看到有人对req ...
- request对象_爬虫:request库的简介
一. request库的安装 在命令行输入pip install requests进行安装 随后进行调用,发现成功 二. request库的最常用方法:get 方法 r= request.get(ur ...
- request的setAttribute()用法及request.sendRedirect 与 request.getRequestDispatcher.forward 的区别
request.setAttribute()怎么用的? JSP1代码 String [] test=new String[2]; test[0]="1"; test[1]=&quo ...
- 【GitHub】GitHub 的 Pull Request 和 GitLab 的 Merge Request 有区别吗?
GitHub 的 Pull Request 和 GitLab 的 Merge Request 有区别吗? 在 GitHub 上混久了,对 Pull Request 就-- 在 GitLab 上混久了, ...
- 错误记录:Current request is not a multipart request
springboot 报错:Current request is not a multipart request 这个一般是controller是带有上传文件的服务,类似@RequestParam M ...
- java request 原理_JavaWeb response和request对象原理及实例解析
HttpServletResponse: HttpServletResponse对象服务器的响应.这个对象中封装了向客户端发送数据.发送响应头,发送响应状态码的方法. 字符编码格式: 方法一: // ...
- e.g., malformed request syntax, invalid request message framing, or deceptive request routing)
一. 问题背景 后台:SSM框架 前端:用ajax发送请求 描述:用ajax发送请求,出现e.g., malformed request syntax, invalid request message ...
- e.g., malformed request syntax, invalid request message framing, or deceptive request routing
报错 e.g., malformed request syntax, invalid request message framing, or deceptive request routing 以及f ...
最新文章
- 女性护理品牌Honeymate获8000万A+轮融资,将与美图公司深度合作
- elasticsearch query delete 方法
- node.js小案例_留言板
- 【python数据挖掘课程】十六.逻辑回归LogisticRegression分析鸢尾花数据
- 原始Dao开发方法以及存在的问题
- DataGridComboBoxColumn控件
- Hibernate主键生成策略与save()方法是否发sql语句的研究
- IOT---(4)物联网平台架构设计
- 【分布式】Zookeeper序列化及通信协议
- 数据结构和算法——八种常用的排序算法------基数排序的优化(队列实现)
- android bionic memcpy 汇编源码解析
- 2019年全国各类型POI数据
- sql语句练习50题(Mysql版)
- proDAD Mercalli 2020V5.0.461注册激活码版视频稳定防抖软件
- Linux 文件同步工具——rsync
- 如何带移动技术团队?
- Mac Android Studio连接MuMu模拟器
- 建设规划合理、高效便捷的现代物流中心——浙江嘉兴市局(公司)卷烟物流配送中心建设纪实...
- 量子计算机 国外大学,全球首款纯硅量子计算机芯片在新南威尔士大学诞生
- 基于rnn的语音降噪matlab,基于RNN的音频降噪算法 (附完整C代码)