概述
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)
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。