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

相关文章
|
1天前
|
监控 网络协议 应用服务中间件
【Tomcat源码分析】从零开始理解 HTTP 请求处理 (第一篇)
本文详细解析了Tomcat架构中复杂的`Connector`组件。作为客户端与服务器间沟通的桥梁,`Connector`负责接收请求、封装为`Request`和`Response`对象,并传递给`Container`处理。文章通过四个关键问题逐步剖析了`Connector`的工作原理,并深入探讨了其构造方法、`init()`与`start()`方法。通过分析`ProtocolHandler`、`Endpoint`等核心组件,揭示了`Connector`初始化及启动的全过程。本文适合希望深入了解Tomcat内部机制的读者。欢迎关注并点赞,持续更新中。如有问题,可搜索【码上遇见你】交流。
【Tomcat源码分析】从零开始理解 HTTP 请求处理 (第一篇)
|
7天前
|
监控 安全 应用服务中间件
如何配置HTTPS协议?
如何配置HTTPS协议?
15 4
|
7天前
|
安全 网络安全 数据安全/隐私保护
HTTP与HTTPS协议区别及应用场景
在互联网高速发展的今天,HTTP与HTTPS作为数据传输的基石,作用至关重要。HTTP允许客户端与服务器间传输超文本文档,但其数据传输过程未加密,存在安全隐患;HTTPS则在此基础上加入了SSL/TLS协议,实现了数据加密传输,增强了安全性,广泛应用于电子商务、网上银行、政府网站及社交媒体平台等涉及敏感信息传输的领域,有效保护了用户隐私和数据安全。随着网络安全意识提升,HTTPS正逐渐成为主流。
|
10天前
|
JSON JavaScript 前端开发
Haskell中的数据交换:通过http-conduit发送JSON请求
Haskell中的数据交换:通过http-conduit发送JSON请求
|
12天前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【9月更文挑战第9天】随着互联网的发展,网络编程成为现代软件开发的关键部分。Python凭借简洁、易读及强大的特性,在该领域展现出独特魅力。本文介绍了Python标准库中的`urllib`和第三方库`requests`在处理HTTP请求方面的优势。`urllib`虽API底层但功能全面,适用于深入控制HTTP请求;而`requests`则以简洁的API和人性化设计著称,使HTTP请求变得简单高效。两者互补共存,共同推动Python网络编程进入全新纪元,无论初学者还是资深开发者都能从中受益。
31 7
|
8天前
|
Java 应用服务中间件 Maven
JavaWeb基础5——HTTP,Tomcat&Servlet
JavaWeb技术栈、HTTP、get和post区别、响应状态码、请求响应格数据式、IDEA使用Tomcat、报错解决、Servlet的体系结构、IDEA使用模板创建Servlet
JavaWeb基础5——HTTP,Tomcat&Servlet
|
10天前
|
开发者
HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
17 1
|
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
fuser可用于查询文件、目录、socket端口和文件系统的使用进程 1.查询文件和目录使用者 fuser最基本的用法是查询某个文件或目录被哪个进程使用: # fuser -v .
876 0
|
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
总结和计划总是让人喜悦或镇痛,一方面以前一段时间没有荒废,能给现在的行动以信心,另一方面看到一年的时间并不能完成很多事情,需要抓紧时间。
607 0
|
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
从hadoop移除机器把需要移除的机器增加到exclueds文件中,强制刷新datanode列表,等待decommission 状态正常后,即可停机下架,如有必要在namenode执行balancer操作。
670 0