(请求)转发和(响应)重定向@HttpServletRequest对象@HttpServletResponse对象

本文详细解释了转发和重定向两种Servlet间跳转技术的区别。转发发生在服务器端,为一次请求响应;重定向发生在客户端,产生两次请求响应。转发保持请求域数据,仅限项目内;重定向改变浏览器地址,可跨域。

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

转发和重定向

理解:
都是用于Servlet之间跳转的技术。只是一个发生在服务器端,一个发生在客户端

(请求)转发

转发功能,找HttpServletRequest对象。
HttpServletRequest是请求域对象

HttpServletRequest对象,也能作为 “域对象” 存取数据。

涉及的方法,跟ServletContext一致:

java.lang.Object getAttribute(java.lang.String name)
返回具有给动名字的 servlet container 的属性,或者当没有具有所给名字的属性时,返回一个空值。
java.util.Enumeration getAttributeNames()
返回一个包含servlet context中属性名字变量的集合.
void removeAttribute(java.lang.String name)
从请求消息中删除一个属性。
void setAttribute(java.lang.String name, java.lang.Object o)
存储一个请求消息中的属性。

注意: 请求域中存储的数据,仅限于当前HTTP请求。

getRequestDispatcher指定的是 服务器端路径 用于表示 目标Servlet的映射地址
forward 方法表示转发 , 要使用相同的请求 和 响应对象。

req.getRequestDispatcher("/to").forward(req, resp);

图解:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(响应)重定向

重定向功能,找HttpServletResponse对象。

处理完成以后,要重定向到 另一个Servlet中
sendRedirect 方法就是重定向
注意: 它里面的路径是客户端路径(要带项目名) /0729/to

resp.sendRedirect(req.getContextPath()+"/to");

自己实现的重定向:
resp.setStatus(302);
resp.addHeader(“Location”, req.getContextPath()+"/to");

图解:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

转发和重定向的区别

  1. 转发发生在服务器端,而重定向发生在客户端
  1. 转发是一次请求,一次响应。而重定向是两次请求两次响应
    将来会学到请求域对象,意味着重定向不能用请求域传值。
  1. 转发只能在项目内部进行转发。而重定向可以是任意位置(包括站外)
  1. 转发时,客户端感知不到(地址栏不变)。而重定向时浏览器的地址栏会发生改变
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值