关于request和response的理解

本文解析了HTTP请求(request)和响应(response)的核心概念,包括如何获取参数、实现转发与重定向,以及response对象的数据发送与重定向技巧。重点介绍了request对象的生命周期、作用域和与response的协作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于request和response的理解

1.介绍

request是代表HTTP请求信息的对象,response是代表HTTP响应信息的对象。

当浏览器发请求访问服务器中的某一个Servlet时,服务器将会调用Servlet中的service方法来处理请求。在调用service方法之前会创建出request和response对象。

其中request对象中封装了浏览器发送给服务器的请求信息(请求行、请求头、请求实体等),response对象中将会封装服务器要发送给浏览器的响应信息(状态行、响应头、响应实体),在service方法执行完后,服务器再将response中的数据取出,按照HTTP协议的格式发送给浏览器。

每次浏览器访问服务器,服务器在调用service方法处理请求之前都会创建request和response对象。(即,服务器每次处理请求都会创建request和response对象)

在请求处理完,响应结束时,服务器会销毁request和response对象。

2.request对象

(一) 获取请求参数

  • 请求参数:所谓的请求参数,就是浏览器发送给服务器的数据(不区分请求方式),例如:通过表单向服务器提交的用户名、密码等,或者在超链接后面通过问号提交的数据,都是请求参数。
  • 获取请求参数使用方法:(1) request.getParameter(String paramName)
    – 根据请求参数的名字获取对应的参数值,返回值是一个字符串;
    – 如果一个参数有多个值,该方法只会返回第一个值。
    – 如果获取的是一个不存在的参数,返回值为null
    (2) request.getParameterValues(String paramName)
    – 根据请求参数的名字获取该名字对应的所有参数值组成的数组,返回值是一个字符串数组,其中包含了这个参数名对应的所有参数值
    – 如果获取的是一个不存在的参数,返回值为null

(二) 实现请求转发

请求转发是服务器内部资源的一种跳转方式,即当浏览器发送请求访问服务器中的某一个资源(A)时,该资源将请求转交给另外一个资源(B)进行处理并且由资源B做出响应的过程,就叫做请求转发。

请求转发和重定向都是资源的跳转方式,但是跳转的过程有所不同。
在这里插入图片描述

  • 请求转发特点:
  • (1)转发是一次请求,一次响应
  • (2)请求转发前后,浏览器的地址栏地址不会发生变化。(浏览器–访问–> A --转发–> B,地址栏地址始终指向A的地址)
  • (3)请求转发前后的request对象是同一个(转发前在A中的request和转发到B后,B中的request对象和A中的request对象是同一个。基于这一点,可以通过request从A带数据到B)
  • (4)请求转发前后的两个资源必须属于同一个Web应用,否则将无法进行转发。(A–转发–>B,A和B必须属于同一个Web应用!)
  • 使用方法:request.getRequestDispatcher(url地址/转发到资源的地址).forward(req, res);

(三) 作用域对象

request在实现转发时,通过request.setAttribute方法和request.getAttribute方法带数据到目的地时,就是通过request对象中的map集合带数据,这个requ est对象上的map集合以及request对象所在的范围即称之为是一个域对象。

如果一个对象具备可以被访问的范围,通过这个对象上的map集合可以在整个范围内实现数据的共享。这样的对象就叫做域对象。

在request对象上提供了往域对象(map)中存数据的方法以及取数据的方法:

  • request.setAttribute(String attrName, Object attrValue);
  • 往request域中存入一个域属性,属性名(key)只能是字符串,属性值(value)可以是任意类型。
  • request.getAttribute(String attrName);
  • 根据属性名(key)获取对应的属性值(value)。返回的是一个Object类型的对象。

request域对象的特点:

  • 生命周期: 在服务器调用Servlet程序的service方法之前,会创建代表请求的request对象,在请求处理完,响应结束时,会销毁request对象。

  • 作用范围: 在一次请求范围内,都可以获取到同一个request对象。

  • 主要功能: 和请求转发配合使用,从Servlet带数据到JSP(带数据到目的地)

  • 扩展内容: request对象的getParameter和getAttribute方法的区别:
    (1) getParameter()方法是用于获取(从浏览器发送过来的)请求参数的,请求参数不能设置,只能是浏览器发送给服务器,在服务器端再通过getParameter方法获取请求中的参数
    (2) getAttribute()方法是用于从request域中获取域属性时用的,域属性得先存入到域中(即得先通过setAttribute方法将数据存入request域中),再通过getAttribute()方法从域中获取。

3.response对象

response是代表HTTP响应信息的对象。

(一) 向客户端发送数据

  • 方法:PrintWriter out = response.getWriter();

由于服务器在通过response获取的流发送数据时,默认使用iso8859-1编码,而这个编码中没有中文字符,所以在通过response获取的流发送中文数据时,会出现乱码问题。

解决方法是:在响应数据之前,通知服务器使用utf-8发送数据。

  • response.setContentType( “text/html;charset=utf-8” );
    PrintWriter out = response.getWriter();
    out.write( “你好” );

(二) 实现重定向

当浏览器向服务器发请求访问某一个资源A,资源A在响应时通知浏览器需要再进一步请求才能获取到对应的资源,浏览器再次发请求访问服务器中的资源B,最终由资源B响应浏览器要获取的资源,这个过程叫做重定向。
在这里插入图片描述
重定向特点:

  • (1)重定向是两次请求、两次响应
  • (2)重定向前后,浏览器的地址栏地址会发生变化。(因为两次请求都是通过浏览器发起,浏览器知道这个跳转的过程,因此地址栏地址会变化)
  • (3)重定向前后的request对象不是同一个(因为重定向是两次请求,服务器会根据两次请求创建两个不同的request对象,request对象不是同一个,也就不能在重定向时通过request带数据到目的地。)
  • (4)重定向前后的两个资源可以是来自不同的web应用,甚至可以是来自不同的服务器。(进行跳转的两个资源之间没有限制)
  • 方法:response.sendRedirect(所重定向到资源的URL地址);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值