javaWeb(十)----- HTTP请求协议,Request

简介: javaWeb(十)----- HTTP请求协议,Request

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种

          (1) GET:

                    ①  请求参数在请求行中,在url后

                    ②  请求的url长度有限制的

                    ③  不太安全

          (2)POST:

                    ①  请求参数在请求体中

                    ②  请求的url长度没有限制的

                    ③  相对安全

2. 请求头:客户端浏览器告诉服务器一些信息

                  请求头名称:请求头值

  * 常见的请求头:

  (1)User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息

           * 可以在服务器端获取该头的信息,解决浏览器的兼容性问题

  (2)Referer:http://localhost/login.html

           * 告诉服务器,我(当前请求)从哪里来?

           * 作用: ①  防盗链

                         ②  统计工作

3. 请求空行

   空行,就是用于分割POST请求的请求头,和请求体的

4. 请求体(正文):封装POST请求消息的请求参数的


✔  响应消息数据格式


Request

✔  request对象和response对象的原理

(1)request和response对象是由服务器创建的,我们只是来使用它们

(2)request对象是来获取请求消息,response对象是来设置响应消息


✔  request对象继承体系结构:    

   ServletRequest        --    接口

       |    继承

   HttpServletRequest    -- 接口

       |    实现

   org.apache.catalina.connector.RequestFacade 类(tomcat)


✔  request功能:

1. 获取请求消息数据

(1)获取请求行数据

       请求行数据  --->   GET   /day14/demo1?name=zhangsan   HTTP/1.1

       * 方法:

       ①  获取请求方式 :GET   ----    String getMethod()  

       ②  获取虚拟目录:/day14  ----  String getContextPath()   ( ▲ )

       ③  获取Servlet路径: /demo1  ----  String getServletPath()

       ④  获取get方式请求参数:name=zhangsan  ----  String getQueryString()

       ⑤  获取请求URI:/day14/demo1    ( ▲ )

             String getRequestURI():    /day14/demo1

             StringBuffer getRequestURL() :   http://localhost/day14/demo1

             * URL 统一资源定位符 : http://localhost/day14/demo1      =>     相当于 “ 中华人民共和国 ”

             * URI 统一资源标识符 :  /day14/demo1      =>     共和国

       ⑥  获取协议及版本:HTTP/1.1  ----   String getProtocol()

       ⑦   获取客户机的IP地址  ----  String getRemoteAddr()

(2) 获取请求头数据

   * 方法:

              String getHeader(String name):通过请求头的名称获取请求头的值    ( ▲ )

              Enumeration<String> getHeaderNames():获取所有的请求头名称

(3) 获取请求体数据

   * 请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数

   * 步骤:

      ①  获取流对象

           *  BufferedReader getReader():获取字符输入流,只能操作字符数据

           *  ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据

      ②  再从流对象中拿数据


2. 其他功能:

(1)获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数

        String getParameter(String name):根据参数名称获取参数值    username=zs&password=123        ( ▲ )

        String[] getParameterValues(String name):根据参数名称获取参数值的数组  hobby=xx&hobby=game

        Enumeration<String> getParameterNames():获取所有请求的参数名称

        Map<String,String[]> getParameterMap():获取所有参数的map集合      ( ▲ )

* 中文乱码问题:

       -----   get方式:tomcat 8 已经将get方式乱码问题解决了

       -----   post方式:会乱码

                解决:在获取参数前,设置request的编码request.setCharacterEncoding("utf-8");


(2)请求转发:一种在服务器内部的资源跳转方式

   * 步骤:

   ① 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)

   ② 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)

   * 特点:

    ① 浏览器地址栏路径不发生变化

    ② 只能转发到当前服务器内部资源中

    ③ 转发是一次请求


(3)共享数据

   * 域对象:一个有作用范围的对象,可以在范围内共享数据

   * request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据

   * 方法:

              void setAttribute(String name,Object obj):存储数据

              Object getAttitude(String name):通过键获取值

              void removeAttribute(String name):通过键移除键值对

相关文章
verbose stack FetchError: request to https://registry.npm.taobao.org/md-editor-v3 failed, reason: ce
这篇文章描述了在安装npm包`md-editor-v3`时遇到的淘宝镜像证书过期问题,并提供了解决方案,即通过切换npm镜像源到`https://registry.npmmirror.com/`来解决安装失败的问题。
verbose stack FetchError: request to https://registry.npm.taobao.org/md-editor-v3 failed, reason: ce
|
13天前
|
监控 网络协议 应用服务中间件
【Tomcat源码分析】从零开始理解 HTTP 请求处理 (第一篇)
本文详细解析了Tomcat架构中复杂的`Connector`组件。作为客户端与服务器间沟通的桥梁,`Connector`负责接收请求、封装为`Request`和`Response`对象,并传递给`Container`处理。文章通过四个关键问题逐步剖析了`Connector`的工作原理,并深入探讨了其构造方法、`init()`与`start()`方法。通过分析`ProtocolHandler`、`Endpoint`等核心组件,揭示了`Connector`初始化及启动的全过程。本文适合希望深入了解Tomcat内部机制的读者。欢迎关注并点赞,持续更新中。如有问题,可搜索【码上遇见你】交流。
【Tomcat源码分析】从零开始理解 HTTP 请求处理 (第一篇)
|
2天前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
7 1
|
22天前
|
JSON JavaScript 前端开发
Haskell中的数据交换:通过http-conduit发送JSON请求
Haskell中的数据交换:通过http-conduit发送JSON请求
|
20天前
|
Java 应用服务中间件 Maven
JavaWeb基础5——HTTP,Tomcat&Servlet
JavaWeb技术栈、HTTP、get和post区别、响应状态码、请求响应格数据式、IDEA使用Tomcat、报错解决、Servlet的体系结构、IDEA使用模板创建Servlet
JavaWeb基础5——HTTP,Tomcat&Servlet
|
23天前
|
开发者
HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
23 1
|
6天前
|
测试技术 API
8-20|https://gitlab.xx.com/api/v4/projects/4/trigger/pipeline Request failed 状态码400
8-20|https://gitlab.xx.com/api/v4/projects/4/trigger/pipeline Request failed 状态码400
|
Web App开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
TCP洪水攻击(SYN Flood)的诊断和处理 Posted by  海涛  on 2013 年 7 月 11 日 Tweet1 ​1. SYN Flood介绍 前段时间网站被攻击多次,其中最猛烈的就是TCP洪水攻击,即SYN Flood。
984 0
|
Web App开发 前端开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
ZooKeeper 保证了数据的强一致性,  zk集群中任意节点(一个zkServer)上的相同znode下的数据一定是相同的。
791 0
下一篇
无影云桌面