HTTP:
  * 概念:Hyper Text Transfer Protocol 超文本传输协议
  * 传输协议:定义了,客户端和服务器端通信时,发送数据的格式
  * 特点:
    1. 基于TCP/IP的高级协议
    2. 默认端口号:80
    3. 基于请求/响应模型的:一次请求对应一次响应
    4. 无状态的:每次请求之间相互独立,不能交互数据

  * 历史版本:
    * 1.0:每一次请求响应都会建立新的连接
    * 1.1:复用连接

  * 请求消息数据格式
    1. 请求行
      请求方式      请求url       请求协议/版本
          GET     /login.html        HTTP/1.1

     * 请求方式:
      * HTTP协议有7中请求方式,常用的有2种
      * GET:
        1. 请求参数在请求行中,在url后。
        2. 请求的url长度有限制的
        3. 不太安全
      * POST:
        1. 请求参数在请求体中
        2. 请求的url长度没有限制的
        3. 相对安全
    2. 请求头:客户端浏览器告诉服务器一些信息
      请求头名称: 请求头值
      * 常见的请求头:
        1. User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
           * 可以在服务器端获取该头的信息,解决浏览器的兼容性问题

        2. Referer:http://localhost/login.html
           * 告诉服务器,我(当前请求)从哪里来?
           * 作用:
              1. 防盗链:
              2. 统计工作:
            如图所示其作用:

                      

      3.  请求空行,就是用于分割POST请求的请求头,和请求体的。
    4. 请求体(正文):
      * 封装POST请求消息的请求参数的

    * 字符串格式:
      POST /login.html HTTP/1.1
      Host: localhost
      User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
      Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
      Accept-Encoding: gzip, deflate
      Referer: http://localhost/login.html
      Connection: keep-alive
      Upgrade-Insecure-Requests: 1
      (空行)
      username=zhangsan

Request:
  1. request对象和response对象的原理
    1. request和response对象是由服务器创建的。我们来使用它们
    2. request对象是来获取请求消息,response对象是来设置响应消息

  2. request对象继承体系结构:
     ServletRequest -- 接口
        | 继承
     HttpServletRequest -- 接口
        | 实现
     org.apache.catalina.connector.RequestFacade 类(tomcat)

  3. request功能:
    1. 获取请求消息数据
      1. 获取请求行数据
        * GET /day14/demo1?name=zhangsan HTTP/1.1
        * 方法:
        1. 获取请求方式 :GET
        * String getMethod()
        2. (*)获取虚拟目录:/day14
          * String getContextPath()
        3. 获取Servlet路径: /demo1
          * String getServletPath()
        4. 获取get方式请求参数:name=zhangsan
          * String getQueryString()
        5. (*)获取请求URI:/day14/demo1
          * String getRequestURI():    /day14/demo1
          * StringBuffer getRequestURL():  http://localhost/day14/demo1

        * URL:统一资源定位符 : http://localhost/day14/demo1 中华人民共和国
        * URI:统一资源标识符 : /day14/demo1 共和国

        6. 获取协议及版本:HTTP/1.1
          * String getProtocol()

        7. 获取客户机的IP地址:
          * String getRemoteAddr()

      2. 获取请求头数据
        * 方法:
        * (*)String getHeader(String name):通过请求头的名称获取请求头的值
        * Enumeration<String> getHeaderNames():获取所有的请求头名称

      3. 获取请求体数据:
        * 请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
        * 步骤:
          1. 获取流对象
            * BufferedReader getReader():获取字符输入流,只能操作字符数据
            * ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据

          2. 再从流对象中拿数据

    2. 其他功能:
      1. 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数
        1. String getParameter(String name):根据参数名称获取参数值 username=zs&password=123
        2. String[] getParameterValues(String name):根据参数名称获取参数值

          的数组 hobby=xx&hobby=game
        3. Enumeration<String> getParameterNames():获取所有请求的参数名称
        4. Map<String,String[]> getParameterMap():获取所有参数的map集合

      * 中文乱码问题:
        * get方式:tomcat 8 已经将get方式乱码问题解决了
        * post方式:会乱码
        * 解决:在获取参数前,设置request的编码request.setCharacterEncoding("utf-8");

      2. 请求转发:一种在服务器内部的资源跳转方式
        1. 步骤:
          1. 通过request对象获取请求转发器对象:

            RequestDispatcher getRequestDispatcher(String path)
          2. 使用RequestDispatcher对象来进行转发:

            forward(ServletRequest request, ServletResponse response)

        2. 特点:
          1. 浏览器地址栏路径不发生变化
          2. 只能转发到当前服务器内部资源中。
          3. 转发是一次请求

      3. 共享数据:
        * 域对象:一个有作用范围的对象,可以在范围内共享数据
        * request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
        * 方法:
          1. void setAttribute(String name,Object obj):存储数据
          2. Object getAttitude(String name):通过键获取值
          3. void removeAttribute(String name):通过键移除键值对

      4. 获取ServletContext:
        * ServletContext getServletContext()

Request部分知识点小结的更多相关文章

  1. C++重要知识点小结---3

    C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...

  2. C++重要知识点小结---2

    C++重要知识点小结--1 :http://www.cnblogs.com/heyonggang/p/3246631.html 1.C++允许程序员声明一个不能有实例对象的类,这样的类惟一的用途是被继 ...

  3. React及Nextjs相关知识点小结

    React及Nextjs知识点小结 函数式组件和类组件区别是什么 1.函数式组件是用于创建无状态的组件,组件不会被实例化,无法访问this中的对象,无法访问生命周期方法,是无副作用的,相比于类组件函数 ...

  4. 【SpringBoot MQ 系列】RabbitMq 核心知识点小结

    [MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...

  5. SpringBoot 系列教程之事务隔离级别知识点小结

    SpringBoot 系列教程之事务隔离级别知识点小结 上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上 ...

  6. disruptor笔记之四:事件消费知识点小结

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. promise知识点小结

    断断续续学习es6也有一段时间了,趁着开学空闲对知识点做一些小结. 为什么使用promise 谈到Promise,我们知道,这是社区较理想的异步编程解决方案.想要掌握promise,我们首先要知道其提 ...

  8. django 知识点小结

    以下内容为用django写blog中的一些知识点,权当复习. 一.定义view 1.get_object_or_404()是用get()查询数据,如果不存在就直接返回404 参数: get_objec ...

  9. shell知识点小结

    目录 引言 shell中的数组 数组的定义 数组的使用 实际的例子 shell中大小的比较 shell中的括号 shell中函数的定义 杂项知识点 字符串转数组 常用判断标志 linux后台运行相关 ...

随机推荐

  1. IIS7 伪静态 web.config 配置方法【详解】

    IIS7 做伪静态比较的简单方便 1.程序方面 只需要设置web.config 就可以了. 2.服务器需要安装:URL Rewrite 下载地址:http://www.iis.net/download ...

  2. c# 模拟并发请求 ,只能并发2个连接。

    使用 HttpWebRequest 模拟并发请求的时候,发现不管怎么提高thread 的数量,都没用,服务器端用计数器看到的都是2个连接,见下图(关于计数器怎么开,百度) 然后搜了一下,发现需要在ap ...

  3. PC 端常用软件

    WPS  金山文档  有道云笔记  格式工厂 运行精灵 UC 遨游 360 Firefox 浏览器 光影魔术手 美图秀秀 2345好压 火绒安全软件 有道云笔记 悟空游戏厅 微信 QQ 迅雷 百度网盘 ...

  4. NoSql数据库Redis系列(3)——Redis数据持久化(RDB)

    大家都知道 Redis 是一个内存数据库,所谓内存数据库,就是将数据库中的内容保存在内存中,这与传统的MySQL,Oracle等关系型数据库直接将内容保存到硬盘中相比,内存数据库的读写效率比传统数据库 ...

  5. 通过遍历而非排序求最值 python list in 时间复杂度 列表元素存在性

    Write a function: def solution(A) that, given an array A of N integers, returns the smallest positiv ...

  6. 海思 Hi3516A Hi3518E V200 芯片介绍

    海康是生产监控摄像头和硬盘录像机的,海思是提供机器里芯片的,海思属于华为的. http://www.hisilicon.com/en/Products/ProductList/Surveillance ...

  7. 003-guava 集合-不可变集合

    一.概述 二.使用 2.1.不可变集合 1.为什么使用不可变集合 不可变对象有很多优点,包括: 当对象被不可信的库调用时,不可变形式是安全的:不可变对象被多个线程调用时,不存在竞态条件问题不可变集合不 ...

  8. c# vs2010 连接access数据库(转)

    第一次在博客园写博文,由于文采不怎么好,即使是自己很熟悉的东西,写起来也会感觉到不知从何讲起,我想写的多了就好了. 这篇文章主要是介绍怎么用c# 语言 vs2010连接access数据库的,连接字符串 ...

  9. Swift4.0复习类

    1.类的属性: 2.类的方法: 3.类作为引用类型: “Swift新增了一对操作符 === 与 !== 用于判定同一个类的两个对象引用是否指向同一对象实例.” 摘录来自: “大话Swift 4.0”. ...

  10. MySQL普通索引性能试验

    首先使用如下node.js脚本创建两张表,并为这两张表各自生成10000条数据: var fs = require('fs'); var nameS = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱 ...