HTTP(Hyper Text Transfer Protocol ,超文本传输协议),定义了客户端与服务器端通信时的数据格式
 
请求消息数据格式:

  1. 请求行——格式:请求方式 请求url 请求协议/版本,比如:GET /login.html HTTP/1.1
    关于请求方式:HTTP协议有7种请求方式,常用的有两种:
    ▶ GET:请求参数在请求行中(url中);请求的url有长度限制;不太安全
    ▶ POST:请求参数在请求体中;请求的url没有长度限制;相对安全

  2. 请求头——格式:键值对。是客户端浏览器告诉服务器的信息。
    关于几个重要的请求头键/值:
    ▶ User-Agent:浏览器告诉服务器"我是哪个版本的浏览器"。这样服务器才能"对症下药",解决浏览器兼容性问题
    ▶ Referer:告诉服务器"我的请求的来源"。这被用于 防盗链统计工作

  3. 请求空行——格式:就是个空行。分割了 请求头 和 请求体

  4. 请求体——传递的信息。POST方式有请求体,GET方式没有。流的形式获取。

request

request对象和response对象的原理

  1. 服务器根据url的资源路径(两次映射,或注解一步到位)对应到相应的Servlet实现类,通过反射机制做出Servlet对象;
  2. 服务器也会自动创建出Request和Response对象——它们被传递给Servlet对象的service方法,service方法自动调用;
  3. 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的功能:

  1. 获取请求行(getContextPathgetServletPathgetRequestURIgetQueryString
  2. 获取请求头(getHeader
  3. 获取请求体(getReader / getInputStream

request其他功能:

  1. 获取请求参数(getParameter
  2. 请求转发(request.getRequestDispatcher("/另一个资源路径").forward(request, response)
  3. 共享数据(setAttribute / getAttribute
  4. 获取ServletContext对象(getServletContext

End ♬

by a Lolicon ✪

【Request】全面总结并理解request相关推荐

  1. 对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)--转

    出处:http://blog.csdn.net/xxd851116/archive/2009/06/25/4296866.aspx [前面的话] 在网上经常看到有人对request.getSessio ...

  2. 理解request.getSession(boolean create)

    为什么80%的码农都做不了架构师?>>>    [前面的话] 在网上经常看到有人对request.getSession(false)提出疑问,我第一次也很迷惑,看了一下J2EE1.3 ...

  3. 对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)

    本文属于本人原创,转载请注明出处:http://blog.csdn.net/xxd851116/archive/2009/06/25/4296866.aspx [前面的话] 在网上经常看到有人对req ...

  4. request对象_爬虫:request库的简介

    一. request库的安装 在命令行输入pip install requests进行安装 随后进行调用,发现成功 二. request库的最常用方法:get 方法 r= request.get(ur ...

  5. request的setAttribute()用法及request.sendRedirect 与 request.getRequestDispatcher.forward 的区别

    request.setAttribute()怎么用的? JSP1代码 String [] test=new String[2]; test[0]="1"; test[1]=&quo ...

  6. 【GitHub】GitHub 的 Pull Request 和 GitLab 的 Merge Request 有区别吗?

    GitHub 的 Pull Request 和 GitLab 的 Merge Request 有区别吗? 在 GitHub 上混久了,对 Pull Request 就-- 在 GitLab 上混久了, ...

  7. 错误记录:Current request is not a multipart request

    springboot 报错:Current request is not a multipart request 这个一般是controller是带有上传文件的服务,类似@RequestParam M ...

  8. java request 原理_JavaWeb response和request对象原理及实例解析

    HttpServletResponse: HttpServletResponse对象服务器的响应.这个对象中封装了向客户端发送数据.发送响应头,发送响应状态码的方法. 字符编码格式: 方法一: // ...

  9. e.g., malformed request syntax, invalid request message framing, or deceptive request routing)

    一. 问题背景 后台:SSM框架 前端:用ajax发送请求 描述:用ajax发送请求,出现e.g., malformed request syntax, invalid request message ...

  10. 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 ...

最新文章

  1. 女性护理品牌Honeymate获8000万A+轮融资,将与美图公司深度合作
  2. elasticsearch query delete 方法
  3. node.js小案例_留言板
  4. 【python数据挖掘课程】十六.逻辑回归LogisticRegression分析鸢尾花数据
  5. 原始Dao开发方法以及存在的问题
  6. DataGridComboBoxColumn控件
  7. Hibernate主键生成策略与save()方法是否发sql语句的研究
  8. IOT---(4)物联网平台架构设计
  9. 【分布式】Zookeeper序列化及通信协议
  10. 数据结构和算法——八种常用的排序算法------基数排序的优化(队列实现)
  11. android bionic memcpy 汇编源码解析
  12. 2019年全国各类型POI数据
  13. sql语句练习50题(Mysql版)
  14. proDAD Mercalli 2020V5.0.461注册激活码版视频稳定防抖软件
  15. Linux 文件同步工具——rsync
  16. 如何带移动技术团队?
  17. Mac Android Studio连接MuMu模拟器
  18. 建设规划合理、高效便捷的现代物流中心——浙江嘉兴市局(公司)卷烟物流配送中心建设纪实...
  19. 量子计算机 国外大学,全球首款纯硅量子计算机芯片在新南威尔士大学诞生
  20. 基于rnn的语音降噪matlab,基于RNN的音频降噪算法 (附完整C代码)

热门文章

  1. WAMP5配置本地服务器(超级详细教程)
  2. 控制台上跳极乐净土(完善动画版)
  3. Java单例模式(饿汉式)
  4. npm/cnpm install 报错 platform unsupported
  5. MP4-M3U8在线P2P加速视频播放器PHP源码
  6. numpy矢量化运算
  7. CMSIS-DSP lib 矩阵运算示例和源码
  8. DSP与FPGA的SRIO通信实现
  9. C语言求素数/质数最高效的方法
  10. 微信公众号支付开发-php