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

获取URL(统一资源定位符): http://localhost:8080/request-demo/req1

获取请求参数(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设置响应数据功能介绍
响应行,对于响应头,比较常用的就是设置响应状态码:

2.设置响应头键值对:

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

获取字节输出流

3.2 Respones请求重定向
1.Response重定向(redirect):一种资源跳转方式。
重定向的实现方式:

重定向的特点
浏览器地址栏路径发送变化
当进行重定向访问的时候,由于是由浏览器发送的两次请求,所以地址会发生变化
可以重定向到任何位置的资源(服务内容、外部均可)
因为第一次响应结果中包含了浏览器下次要跳转的路径,所以这个路径是可以任意位置资源。
两次请求,不能在多个资源使用request共享数据
因为浏览器发送了两次请求,是两个不同的request对象,就无法通过request对象进行共享数据
3.3 Response响应字符数据
要想将字符数据写回到浏览器,我们需要两个步骤:
通过Response对象获取字符输出流: PrintWriter writer = resp.getWriter();
通过字符输出流写数据: writer.write("aaa");