Request&Response

  1. Request和Response的概述

Request是请求对象,Response是响应对象。

  • request:==获取==请求数据

  • 浏览器会发送HTTP请求到后台服务器[Tomcat]

  • HTTP的请求中会包含很多请求数据[请求行+请求头+请求体]

  • 后台服务器[Tomcat]会对HTTP请求中的数据进行解析并把解析结果存入到一个对象中

  • 所存入的对象即为request对象,所以我们可以从request对象中获取请求的相关参数

  • 获取到数据后就可以继续后续的业务,比如获取用户名和密码就可以实现登录操作的相关业务

  • response:==设置==响应数据

  • 业务处理完后,后台就需要给前端返回业务处理的结果即响应数据

  • 把响应数据封装到response对象中

  • 后台服务器[Tomcat]会解析response对象,按照[响应行+响应头+响应体]格式拼接结果

  • 浏览器最终解析结果,把内容展示在浏览器给用户浏览

小结

在这节中,我们主要认识了下request对象和reponse对象:

  • request对象是用来封装请求数据的对象

  • response对象是用来封装响应数据的对象

2.2 Request获取请求数据

HTTP请求数据总共分为三部分内容,分别是==请求行、请求头、请求体==

请求行包含三块内容,分别是请求方式、请求资源路径、HTTP协议及版本

对于这三部分内容,request对象都提供了对应的API方法来获取,具体如下:

  • 获取请求方式: GET

  • 获取虚拟目录(项目访问路径): /request-demo

  • 获取请求参数(GET方式): username=zhangsan&password=123

  • 获取URI(统一资源标识符): /request-demo/req1

2.2.2 获取请求头数据

对于请求头的数据,格式为key: value如下:

所以根据请求头名称获取对应值的方法为:

2.2.3 获取请求体数据

浏览器在发送GET请求的时候是没有请求体的,所以需要把请求方式变更为POST,请求体中的数据格式如下:

对于请求体中的数据,Request对象提供了如下两种方式来获取其中的数据,分别是:

  • 获取字节输入流,如果前端发送的是字节数据,比如传递的是文件数据,则使用该方法

  • 获取字符输入流,如果前端发送的是纯文本数据,则使用该方法

小结

HTTP请求数据中包含了请求行、请求头和请求体,针对这三部分内容,Request对象都提供了对应的API方法来获取对应的值:

  • 请求行

  • getMethod()获取请求方式

  • getContextPath()获取项目访问路径

  • getRequestURL()获取请求URL

  • getRequestURI()获取请求URI

  • getQueryString()获取GET请求方式的请求参数

  • 请求头

  • getHeader(String name)根据请求头名称获取其对应的值

  • 请求体

  • 注意: ==浏览器发送的POST请求才有请求体==

  • 如果是纯文本数据:getReader()

  • 如果是字节数据如文件数据:getInputStream()

2.2.4 获取请求参数的通用方式

请求参数的获取,常用的有以下两种:

  • GET方式:

  • POST方式:

request对象为我们提供了如下方法:

  • 获取所有参数Map集合

  • 根据名称获取参数值(数组)

  • 根据名称获取参数值(单个值)

2.4 请求参数中文乱码问题

不管是GET还是POST请求,在发送的请求参数中如果有中文,在后台接收的时候,都会出现中文乱码的问题。

  • 分析出现中文乱码的原因:

  • POST的请求参数是通过request的getReader()来获取流中的数据

  • TOMCAT在获取流的时候采用的编码是ISO-8859-1

  • ISO-8859-1编码是不支持中文的,所以会出现乱码

  • 解决方案:

  • 页面设置的编码格式为UTF-8

  • 把TOMCAT在获取流数据之前的编码设置为UTF-8

  • 通过request.setCharacterEncoding("UTF-8")设置编码,UTF-8也可以写成小写

3.Response对象

  • Request:使用request对象来==获取==请求数据

  • Response:使用response对象来==设置==响应数据

Reponse的继承体系和Request的继承体系也非常相似:

3.1 Response设置响应数据功能介绍

  1. 响应行,对于响应头,比较常用的就是设置响应状态码:

2.设置响应头键值对:

3.响应体,是通过字符、字节输出流的方式往浏览器写

获取字符输出流:

获取字节输出流

3.2 Respones请求重定向

  1. 1.Response重定向(redirect):一种资源跳转方式。

  1. 重定向的实现方式:

  1. 重定向的特点

  • 浏览器地址栏路径发送变化

  • 当进行重定向访问的时候,由于是由浏览器发送的两次请求,所以地址会发生变化

  • 可以重定向到任何位置的资源(服务内容、外部均可)

因为第一次响应结果中包含了浏览器下次要跳转的路径,所以这个路径是可以任意位置资源。

  • 两次请求,不能在多个资源使用request共享数据

因为浏览器发送了两次请求,是两个不同的request对象,就无法通过request对象进行共享数据

3.3 Response响应字符数据

要想将字符数据写回到浏览器,我们需要两个步骤:

  • 通过Response对象获取字符输出流: PrintWriter writer = resp.getWriter();

  • 通过字符输出流写数据: writer.write("aaa");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值