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):通过键移除键值对

相关文章
|
4天前
|
缓存 网络协议 前端开发
Web 性能优化|了解 HTTP 协议后才能理解的预加载
本文旨在探讨和分享多种预加载技术及其在提升网站性能、优化用户体验方面的应用。
Web 性能优化|了解 HTTP 协议后才能理解的预加载
|
10天前
|
XML JSON 前端开发
HTTP协议,Content-Type格式介绍篇
通过理解和正确使用Content-Type头字段,可以确保数据在网络上传输时的正确性和高效性,提升网络应用的可靠性和用户体验
56 28
|
8天前
|
XML JSON 前端开发
HTTP协议,Content-Type格式介绍篇
通过理解和正确使用Content-Type头字段,可以确保数据在网络上传输时的正确性和高效性,提升网络应用的可靠性和用户体验。
119 25
|
11天前
|
XML JSON 前端开发
HTTP协议,Content-Type格式介绍篇
通过理解和正确使用Content-Type头字段,可以确保数据在网络上传输时的正确性和高效性,提升网络应用的可靠性和用户体验。
145 18
|
20天前
|
缓存 应用服务中间件 Apache
HTTP 范围Range请求
HTTP范围请求是一种强大的技术,允许客户端请求资源的部分内容,提高了传输效率和用户体验。通过正确配置服务器和实现范围请求,可以在视频流、断点续传下载等场景中发挥重要作用。希望本文提供的详细介绍和示例代码能帮助您更好地理解和应用这一技术。
71 19
|
28天前
|
JSON JavaScript 前端开发
什么是HTTP POST请求?初学者指南与示范
HTTP POST请求是一种常用的HTTP方法,主要用于向服务器发送数据。通过合理设置请求头和请求主体,可以实现数据的可靠传输。无论是在客户端使用JavaScript,还是在服务器端使用Node.js,理解和掌握POST请求的工作原理和应用场景,对于Web开发至关重要。
244 18
|
26天前
|
前端开发 网络协议 安全
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
|
27天前
|
JSON 数据格式
.net HTTP请求类封装
`HttpRequestHelper` 是一个用于简化 HTTP 请求的辅助类,支持发送 GET 和 POST 请求。它使用 `HttpClient` 发起请求,并通过 `Newtonsoft.Json` 处理 JSON 数据。示例展示了如何使用该类发送请求并处理响应。注意事项包括:简单的错误处理、需安装 `Newtonsoft.Json` 依赖,以及建议重用 `HttpClient` 实例以优化性能。
70 2