重定向与转发详解

本文详细介绍了HTTP中的重定向和转发概念。重定向是服务器通知浏览器向新地址发送请求,地址栏会显示新地址,适用于不同web应用间的跳转。而转发则在同一web应用内进行,请求对象可以被共享,地址栏地址不改变。两者在应用场景上有显著区别。

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

1.重定向

(1)什么是重定向?

服务器通知浏览器向某个地址发送请求。

注:
	服务器可以通过发送302状态码及location消息头(该消息头的值是一个地址,一般称之为重定向地址)给浏览器,浏览器收到之后,会
	立即向重定向地址发送请求。

重定向

(2)如何重定向?

response.sendRedirect(String url);

注:
	url就是重定向地址。
	重定向之前,服务器会清空response对象上存放的所有数据。

(3)重定向的特点

a.重定向的地址是任意的。

b.重定向之后,浏览器地址栏的地址会发生变化。

2.转发

(1)什么是转发?

一个web组件将未完成的处理交给另外一个web组件继续做。

注:
	web组件是servlet和jsp的统称。
	常见的情况是一个servlet获得数据之后,转发给一个jsp来
	展现这些数据。

转发

(2)如何转发?

step1.绑订数据到request对象上。

request.setAttribute(String name,Object obj);
注:
	name称之为绑订名,obj称之为绑订值。
	内部的实现,实际上是将数据放到了一个map对象里面。 

step2.获得转发器。

RequestDispatcher rd = 
	request.getRequestDispatcher(String uri);
注:
	a.RequestDispatcher是一个接口,该方法会返回一个实现了
	该接口的对象(即转发器)。
	b.uri是转发的目的地,通常是一个jsp的地址。
	c.RequestDispatcher可以理解为是一个媒介,web组件
	可以通过RequestDispatcher来通知容器去调用另外一个web
	组件。
	d.转发的本质是一个web组件通知容器去调用另外一个web组件。

step3.转发

rd.forward(request,response);		

(3)转发的特点

a.转发之后,浏览器地址栏的地址不变。

b.转发的目的地有限制,要求属于同一个web应用。

2. 比较转发与重定向

a.浏览器地址栏的地址有无变化?

重定向之后,浏览器地址栏的地址会发生变化;
转发之后,浏览器地址栏的地址不变。

b.目的地有无限制?

重定向地址没有任何限制,转发有限制(要求属于同一个web应用)。

c.能否共享request对象?

转发所涉及的各个web组件可以共享同一个request对象,
重定向不行。
注:
	c1.容器收到请求之后,会立即创建request对象和response
	对象,一旦响应发送完毕,容器会立即删除这两个对象。
	即request对象和response对象的生存时间很短暂(在
	一次请求与响应期间存在)。

	c2.重定向是两次请求,上次请求创建的request对象和response
	对象已经被删除。

d.转发是一件事没有做完,让另外一个web组件继续做;而重定向是
一件事已经完成,去做另外一件独立的事。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值