Bootstrap

Response和Request

Request和Response的概述

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

         request是获取,请求数据

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

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

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

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

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

        response是设置,响应数据

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

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

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

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

  



Request

Request的继承体系

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

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

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


Request获取请求数据

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

请求行:

请求头:

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

请求体: 

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

 获取请求参数的通用方式

        所以我们有必要来找到一个通用的方法来获取请求参数

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

主要有两种解决方案

其中可以根据需要的值的数量来选择不同的方法


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

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

Post的解决方案

GET的解决方案

 

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

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

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

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

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

 



Request的请求转发

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

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

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

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

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

请求转发之间的共享资源



Response

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

 Response的继承体系

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


Response进行响应数据

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

响应行:

响应头:
 响应体:

Response请求重定向

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

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

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

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

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

重定向的实现方式:

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

重定向的特点

重定向和请求转发的区别

路径问题

 


Response相应字符数据


Response相应字符数据

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

 



用户登录案例

 



用户注册案例



 

;