概述

request:—获取—请求数据(用来封装请求数据的对象)

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

Request对象

继承体系

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

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

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

Request获取请求数据

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

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

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

- 获取请求方式: GET

    String getMethod()

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

    String getContextPath()

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

    StringBuffer getRequestURL()

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

    String getRequestURI()

- 获取请求参数(GET方式): username=lisi&password=123(重点)

    String getQueryString()

获取请求参数的通用方式

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

GET方式:       String getQueryString()
POST方式:      BufferedReader getReader();

由于doGet和doPost方法请求参数的方式不一样会出现重复的代码,同时doGet和doPost方法都必须存在,不能删除任意一个。

解决方式一:在doGet中调用doPost,在doPost中完成参数的获取和打印,

解决方式二:

request对象已经将上述获取请求参数的方法进行了封装,并且request提供的方法实现的功能更强大,以后只需要调用request提供的方法即可,在request的方法中都实现了哪些操作?

(1)根据不同的请求方式获取请求参数,获取的内容如下:

(2)把获取到的内容进行分割,内容如下:

(3)把分割后端数据,存入到一个Map集合中:

注意:因为参数的值可能是一个,也可能有多个,所以Map的值的类型为String数组。

基于上述理论,request对象提供了如下方法:

- 获取所有参数Map集合

    Map<String,String[]> getParameterMap()

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

    String[] getParameterValues(String name)

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

    String getParameter(String name)


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注