Request

本文详细介绍了HTTP请求过程中request和response对象的原理及使用。request对象用于获取请求消息数据,包括请求行、请求头、请求体等信息;response对象则用于设置响应消息。此外,还讲解了请求转发、处理乱码问题以及如何在服务器内部共享数据。重点关注request对象的getMethod、getHeader、getParameter等方法和response对象的转发功能。
摘要由CSDN通过智能技术生成

request对象和response对象的原理

通过url访问资源的大概过程,如下
在这里插入图片描述

我们需要注意

  1. request和response对象是由服务器创建的。我们只是来使用它
  2. request对象是来获取请求消息的,response对象是来设置响应消息的

request对象的继承体系

RequestFacade类实现了ServletRequest接口,而ServletReques接口继承了ServletRequest接口

Request对象的功能

1、获取请求消息中的数据

(1)获取请求行的数据(标黄的重点掌握)

① 获取请求方式的方法
String getMethod( )

获取虚拟目录的方法
String getContextPath

③ 获取Servlet路径的方法
String getServletPath( )

④ 获取get方式的请求参数的方法
String getQueryString( )

获取请求URI的方法
String getRequestURI( )得到的是:/虚拟目录/资源目录

⑥ 获取请求URL的方法
StringBuffer getRequestURL( )得到的是:http://ip地址/虚拟目录/资源目录

⑦ 获取协议及其版本信息的方法
String getProtocol( )

⑧ 获取客户机IP地址的方法
String getRemoteAddr( )

(2)获取请求头的数据

String getHeader(String name)
通过请求头的名称获取请求头的值注意这里面的请求头名称的参数是不区分大小写的

Enumeration<String> getHeaderNames( )这个返回值类型类似于迭代器
获取所有的请求头名称

(3)获取请求体的数据

请求体重只有post请求方式,才有请求体,在请求体中封装了post请求的请求参数

想要获取请求体中的数据,需要完成两个步骤:
首先获取流对象,流对象有两种获取方式:
BufferedReader getReader()
获取字符输入流,只能操作字符数据
在这里插入图片描述

ServletInputStream getInputStream
获取字节输入流,可以操作所有类型,也可以操作字符,但是没有字符流高效

最后从流对象中拿去数据

2、其他功能

获取请求参数的通用方法

无论是get还是post的方法都能用通用方法获取,注意只有在form的表单中的input里面用name然后将name传入以下的方法的参数当中,才能够获取到值

String getParameter(String name)
根据参数名称获取参数值

String[ ] getParameterValues(String name)
根据参数名称获取参数的数组,用于解决参数相同值不相同的情况

Enumeration<String> getParameterNames( )
获取所有请求参数的名称

Map<String, String[ ] > getParameterMap()
获取所有参数的map集合

注意乱码问题:
在这里插入图片描述
在tomcat8中已经解决get方式的乱码问题,但如果是post的方式的话我们需要在设置参数前指定编码
如下

在这里插入图片描述

请求转发

我们可以把请求转发理解为一种在服务器内部的资源跳转方式

步骤:
① 通过request对象获取请求转发器对象
RequestDispathcer getRequestDispatcher(String path)
② 使用RequestDispatcher对象来进行转发
forward(ServletRequest request,ServletResponse response)

举例说明
在这里插入图片描述
建议使用第二种链式编程的方式

重点 转发的特点:

  1. 浏览器地址栏不会发生变化
  2. 只能转发到当前服务器内部的资源中
  3. 转发是一次请求

共享数据

什么是域对象?
域对象是一个由作用范围的对象,可以在范围内共享数据

request域的范围有多大?
代表一次请求的范围,一般用于请求转发的多个资源中共享数据使用

方法如下:
void setAttribute(String name,Object obj)
用于存储数据

Object getAttitude(String name)
通过键获取值

void removeAttribut(String name)
通过键移除键值对

获取ServletContext

ServletContext getServletContext()
暂不详细介绍,后面专门介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值