HTTP

1. 概念:Hyper Text Transfer Protocol 超文本传输协议

  • 定义了客户端和服务器通信时的数据发送格式
  • 特点:
    1. 基于TCP/IP的高级协议
    2. 默认端口号:80
    3. 基于请求/响应模型:一次请求对应一次响应
    4. 无状态:每次请求之间相互独立,不能实现通讯

2. 请求消息数据格式

2.1 请求行

POST /DemoWeb200826_war_exploded/demo2 HTTP/1.1
其信息格式为:请求方式 请求url 请求协议/版本
HTTP协议中的请求方式共有7种,其中常用的请求方式有2种:

  • GET:请求参数在请求行中,url长度有限,不太安全
  • POST:请求参数在请求体中,请求的url长度无限,相对安全

2.2 请求头

请求头信息

常用请求头:

  • User-Agent:获取浏览器信息,解决兼容问题
  • Referer:告诉服务器当前请求从哪里来。
    可用于防盗链和统计工作

2.3 请求空行

空行,分割Post 请求的请求头和请求体

2.4 请求体

封装POST请求消息的请求参数

3. Request对象

request对象和response对象均由服务器创建,我们来进行使用;
request对象用以获得请求消息,response对象用以设置响应消息;

  • request对象继承体系结构:
    HttpServletRequest的实现类由Tomcat定义。
Request对象继承体系结构图
  • 功能:
    获取请求消息数据:

    1. 获取请求行数据

    其方法如下图所示


    获取请求行数据方法
    2. 获取请求头数据
    • *String getHeader(String name):通过请求头名称获取值
    • Enumeration<String> getHeaderNames():获取所有的请求头名称
    3. 获取请求体数据
    • 获取流对象
      1. BufferedReader getReader():获取字符输入流,只能操作字符数据
      2. ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
    • 从流对象拿取数据

    其他功能:

    1. 获取请求参数通用方式
    • *String getParameter(String name):根据参数名称获取参数值
    • String[] getParameterValues(String name):根据参数名称获取参数值的数组(多用于复选框的传参)
    • Enumeration<String> getParameterNames():获取所有请求参数名称
    • *Map<String,String[]> getParameterMap():获取所有请求参数map集合
      BeanUtils包可简化数据的封装过程
      中文乱码问题:当我们使用get方式时,Tomcat8已经将get方式乱码问题解决;而当我们使用post方式时,请求信息中中文会出现乱码情况。我们需要在获取参数之前设置Request的编码格式使之与前端文本设置的编码格式相一致,代码为request.setCharacterEncoding("UTF-8");
    2. 请求转发:一种在服务器内部的资源跳转方式
    • 步骤:
      I. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
      II. 使用请求转发器对象进行转发:forward(ServletRequest request, SetvletResponse response)
      具体实现代码:request.getRequestDispatcher("/demo2").forward(request,response);
    • 特点:
      I. 浏览器地址栏路径不发生变化;
      II. 只能转发到当前服务器内部资源中;
      III. 转发过程中,只发生一次请求
    3. 共享数据
    • 域对象:一个有作用范围的对象,在范围内数据共享
    • request域:范围为一次请求,一般用于请求时转发的多个资源共享数据
    • 方法:
      void setAttribute(String name, Object obj)//存储数据
      Object getAttribute(String name)//用键取值
      void removeAttribute(String name)//通过键删除一对键值对
      
    4. 获取ServletContext

    ServletContext getServletContext()

4. 响应消息数据格式

其数据格式类似请求数据格式,分为响应行,响应头,响应空行和响应体

4.1 响应行

HTTP/1.1 200 OK
其信息格式为:请求协议/版本 响应状态码 状态码描述

响应状态码

4.2 响应头

其格式也与请求头一致,为键值对
常见响应头:

  • Content-Type:服务器告诉客户端本次响应体数据的本文和编码格式;
  • Content-disposition:告诉服务器以什么格式打开响应体数据。
    I. in-line:默认值,在当前页面内打开
    II. attachment;filename=xxx:以附件形式打开,文件下载。

4.3 响应体:传输的数据

4. Response对象

  • 设置响应行状态码:setStatus(int sc)
  • 设置响应头:setHeader(String name, String value)
  • 设置响应体:


    步骤
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容