Response和Request

Request和Response的概述

        Request是请求对象,Response是响应对象,这两个对象主要出现和使用在,servlet的service函数中

Response和Request_第1张图片         request是获取,请求数据

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

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

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

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

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

        response是设置,响应数据

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

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

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

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

Response和Request_第2张图片 Response和Request_第3张图片 



Request

Request的继承体系

        Request继承体系主要分为三部分:ServletRequest,HttpServletRequest,RequestFacade

ServletRequest是Java提供的根接口,HttpServletRequest是Java对Http封装协议提供的接口,RequestFacade是Web服务器[Tomcat]对接口的实现类

Response和Request_第4张图片

        在这其中ServletRequest和HttpServletRequest两个类都是Java提供的接口类都无法进行了类的实现,那么类的实现就完全交给了Web服务器,类似于Tomcat这种

Response和Request_第5张图片

Response和Request_第6张图片


Request获取请求数据

        HTTP请求主要包括请求行,请求头,请求体三部分,所以我们需要学习如何获取这三部分

请求行:

Response和Request_第7张图片

请求头:

        对于请求头的数据是按照key:value的形式来获取,我们一般是根据key来找到value的值,根据请求头的key获得value的值的方法为

请求体: 

        浏览器在发送GET请求的时候是没有请求体的,所以我们需要转为Post的请求方式,对于请求体中的数据,Request提供了两种方法来进行读取其中的数据分别是:获取字节输入流,获取字符输入流

Response和Request_第8张图片

Response和Request_第9张图片

 获取请求参数的通用方式

Response和Request_第10张图片        所以我们有必要来找到一个通用的方法来获取请求参数

Response和Request_第11张图片         其中又存在sout语句的重复使用,所以我们可以在doPost中直接调用doGet方式来进行获取请求参数,当然,也可以在doGet中调用doPost,在doPost中完成参数的获取和打印,另外需要注意的是,doGet和doPost方法都必须存在,不能删除任意一个。

主要有两种解决方案

Response和Request_第12张图片Response和Request_第13张图片Response和Request_第14张图片其中可以根据需要的值的数量来选择不同的方法Response和Request_第15张图片


Request传输中出现的中文乱码问题

        在Request传输中出现中文乱码的主要问题是浏览器在传输数据时会利用utf-8进行URL编码,而tomcat利用ios进行解码,因此就会出现了中文乱码的问题

Post的解决方案

Response和Request_第16张图片GET的解决方案

Response和Request_第17张图片Response和Request_第18张图片 

(1)浏览器通过HTTP协议发送请求和数据给后台服务器(Tomcat)

(2)浏览器在发送HTTP的过程中会对中文数据进行URL==编码==

(3)在进行URL编码的时候会采用页面标签指定的UTF-8的方式进行编码,张三编码后的结果为%E5%BC%A0%E4%B8%89

(4)后台服务器(Tomcat)接收到%E5%BC%A0%E4%B8%89后会默认按照ISO-8859-1进行URL==解码==

(5)由于前后编码与解码采用的格式不一样,就会导致后台获取到的数据为乱码。

Response和Request_第19张图片 Response和Request_第20张图片

Response和Request_第21张图片



Request的请求转发

        Request的请求转发是一种在服务器内部进行资源跳转的方式

Response和Request_第22张图片

(1)浏览器发送请求给服务器,服务器中对应的资源A接收到请求

(2)资源A处理完请求后将请求发给资源B

(3)资源B处理完后将结果响应给浏览器

(4)请求从资源A到资源B的过程就叫==请求转发==

Response和Request_第23张图片

请求转发之间的共享资源

Response和Request_第24张图片



Response

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

 Response的继承体系

        Response的继承体系和Request的继承体系类似,如图

Response和Request_第25张图片


Response进行响应数据

        HTTP响应数据总共分为三部分内容,分别是:响应行、响应头、响应体

响应行:

Response和Request_第26张图片

响应头:
Response和Request_第27张图片 响应体:

Response和Request_第28张图片Response请求重定向

         Response请求重定向也是另一种资源跳转方式

Response和Request_第29张图片

(1)浏览器发送请求给服务器,服务器中对应的资源A接收到请求

(2)资源A现在无法处理该请求,就会给浏览器响应一个302的状态码+location的一个访问资源B的路径

(3)浏览器接收到响应状态码为302就会重新发送请求到location对应的访问地址去访问资源B

(4)资源B接收到请求后进行处理并最终给浏览器响应结果,这整个过程就叫==重定向==

重定向的实现方式:

Response和Request_第30张图片Response和Request_第31张图片

由于setStatus方法和SetHeader方法具有相似性,所以可以进行简化的编写方式

重定向的特点

Response和Request_第32张图片重定向和请求转发的区别

Response和Request_第33张图片路径问题

 


Response相应字符数据


Response相应字符数据

        在这其中进行字节拷贝时的代码会有很多繁杂的部分,apche公司提供了一个方法可以简化书写

Response和Request_第34张图片Response和Request_第35张图片 



用户登录案例

Response和Request_第36张图片

 



用户注册案例

Response和Request_第37张图片



 

你可能感兴趣的:(p2p,网络协议,网络)