1.Request和Response的概述

==Request是请求对象,Response是响应对象。==这两个对象在我们使用Servlet的时候有看到:
此时,我们就需要思考一个问题request和response这两个参数的作用是什么?1628735746602.png

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

  • 浏览器会发送HTTP请求到后台服务器[Tomcat]
  • HTTP的请求中会包含很多请求数据[请求行+请求头+请求体]
  • 后台服务器[Tomcat]会对HTTP请求中的数据进行解析并把解析结果存入到一个对象中
  • 所存入的对象即为request对象,所以我们可以从request对象中获取请求的相关参数
  • 获取到数据后就可以继续后续的业务,比如获取用户名和密码就可以实现登录操作的相关业务

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

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

  • 把响应数据封装到response对象中
  • 后台服务器[Tomcat]会解析response对象,按照[响应行+响应头+响应体]格式拼接结果
  • 浏览器最终解析结果,把内容展示在浏览器给用户浏览

对于上述所讲的内容,我们通过一个案例来初步体验下request和response对象的使用。image.png
启动成功后就可以通过浏览器来访问,并且根据传入参数的不同就可以在页面上展示不同的内容:1628738273049.png
小结
在这节中,我们主要认识了下request对象和reponse对象:

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

    2. Request对象

    1.Request继承体系

  • 当我们的Servlet类实现的是Servlet接口的时候,service方法中的参数是ServletRequest和ServletResponse

  • 当我们的Servlet类继承的是HttpServlet类的时候,doGet和doPost方法中的参数就变成HttpServletRequest和HttpServletReponse

    思考下面这几个问题:

  • ServletRequest和HttpServletRequest的关系是什么?

  • request对象是有谁来创建的?
  • request提供了哪些API,这些API从哪里查?

    Request的继承体系:1628740441008.png

    从上图中可以看出,ServletRequest和HttpServletRequest都是Java提供的

  • ServletRequest和HttpServletRequest是继承关系,并且两个都是接口,接口是无法创建对象,这个时候就引发了下面这个问题:1628742224589.png

这个时候,我们就需要用到Request继承体系中的RequestFacade:

  • 该类实现了HttpServletRequest接口,也间接实现了ServletRequest接口。
  • Servlet类中的service方法、doGet方法或者是doPost方法最终都是由Web服务器[Tomcat]来调用的,所以Tomcat提供了方法参数接口的具体实现类,并完成了对象的创建
  • 要想了解RequestFacade中都提供了哪些方法,我们可以直接查看JavaEE的API文档中关于ServletRequest和HttpServletRequest的接口文档,因为RequestFacade实现了其接口就需要重写接口中的方法

对于上述结论,要想验证,可以编写一个Servlet,在方法中把request对象打印下,就能看到最终的对象是不是RequestFacade,代码如下:image.png
启动服务器,运行访问http://localhost:8080/request-demo/demo2,得到运行结果:![1628743040046.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1657077941922-da9edccb-8ea4-48fc-8ce8-7876639cdde5.png#clientId=u2b7f6227-99b6-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=119&id=u69e2b552&margin=%5Bobject%20Object%5D&name=1628743040046.png&originHeight=149&originWidth=1762&originalType=binary&ratio=1&rotation=0&showTitle=false&size=93084&status=done&style=none&taskId=u3bb9a106-4cfe-4b92-93dd-d3c4521d61b&title=&width=1409.6)
小结

  • Request的继承体系为ServletRequest—>HttpServletRequest—>RequestFacade
  • Tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到service方法
  • 使用request对象,可以查阅JavaEE API文档的HttpServletRequest接口中方法说明