Servlet中请求转发和重定向的原理及区别

1、定义

 

    1)Forward(请求转向):服务器程序内部请求转向,这个特性允许前一个程序用于处理请求,而后一个程序用来返回响应。

    2)Redirect(重定向):服务端发送给客户端一个重定向的临时响应头,这个响应头包含重定向之后的URL,客户端用新的URL重新向服务器发送一个新的请求。

 

2、定义简单理解

 

   1)请求转发只是把请求转发给服务器上(通常是同一个Web应用中)的另一个组件(Servlet或Jsp等)。

    2)重定向则只是告诉客户(浏览器)去访问另一个URL(可能是同一个Web站点甚至其他站点)。

 

3、本质区别

 

    1)请求转发发生在服务器端,由服务器(比如servlet)控制。

    2)重定向发生在客户端,由客户(通常是浏览器)控制。

 

4、请求和响应次数

 

    1)请求转发过程在同一个请求当中完成,只会返回一个响应。

    2)重定向过程则发生在两个不同的请求中,会返回两个不同响应。

 

5、基于第4点,进一步分析

 

    1)请求转发后可以在服务器端获取本次请求对象上保存的信息(比如在Servlet中将用户名保存到当前request对象中,转发给另一组件(如JSP)后,另一组件可以通过request对象取得用户名信息)。

    2)请求转发后,浏览器地址栏URL不会发生改变。

    3)重定向后则无法在服务器端获取第一次请求对象上保存的信息(比如还是在Servlet中将用户名保存到当前request对象中,并重定向到一个新的URL,然后在新URL指向的地址中(比如还是某个Servlet)就无法获取原先保存在第一个请求中的信息。很明显,用户名是保存在第一次请求的对象中,但并没有保存在本次(第二次)请求的对象中)。

    4)重定向后,浏览器地址栏URL变为新的URL(因为浏览器确实给新的URL发送了一个新的请求)。

 

6、服务器端调用的方法

 

    1)请求转发使用RequestDispatcher对象的forward()或include()方法(他们的区别可参考:Servlet中请求转发时forword()和include()的区别)。

    2)重定向则使用HttpServletResponse对象的sendRedirect()方法。

 

7、基于第6点,进一步分析

 

    1)RequestDispatcher对象是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,所以forward()或include()本质来说是属于请求对象的方法,所以请求转发始终发生在一个请求当中。

    2)sendRedirect()方法HttpServletResponse对象的方法,即响应对象的方法。既然调用了响应对象的方法,就表示本次请求过程已经结束了,服务器即将向客户端返回本次请求的响应了。事实上,服务器确实返回了一个状态码为“302”,首部“Location”值为新的URL的响应。然后浏览器就会根据“Location”首部指定的URL,重新发起一次新的请求,转向这个目标页面,所以重定向实际上发生在两个不同的请求当中。

 

8、sendRedirect()和forword()中使用相对URL分析(站点为:http://localhost:8080/,Web应用为MyApp)。

 

    1)sendRedirect(URL):如果使用”/”开头,则表示相对于整个Web站点的根目录,如使用sendRedirect(“/foo/myHtml.html”)时,容器建立的完整URL为:http://localhost:8080/foo/myHtml.html。否则,就表示相对于当前目录。

    2)request.getRequestDispatcher(URL).forward(req,res):如果使用”/”开头,则表示相对于当前Web应用的根目录,而非整个Web站点的根目录,如使用request.getRequestDispatcher(/foo/myHtml.html).forward(req,res)时,容器会建立绝对(完整)的URL为:http://localhost:8080/MyApp/foo/myHtml.html。否则,同样表示相对于当前目录。

 

9、跳转时机(有待考究)

 

    1)请求转发执行到跳转语句后马上无条件跳转,之后的代码不再执行。

    2)重定向则会在所有代码执行完毕后跳转,但不能再向response中写入任何数据。(可以在重定向跳转后加上return语句,实现马上跳转)

 

10、执行时机(相同点)

 

    1)请求转发和重定向方法都必须在响应提交(刷新响应正文输出到流中)之前执行,否则会抛出IllegalStateException异常。

    2)在转发或重定向之前,响应缓冲区中未提交的数据会被自动清除。

 

11、响应速度(理论上)

 

    1)请求转发相对快:因为请求转发过程在同一请求中。

    2)重定向相对慢:因为重定向过程发生在两个不同的请求中。

 

【Servlet笔记02】Servlet乱码问题,请求转发和重定向,Cookie和Session会话技术的介绍及使用 一、Servlet相关组件 1.1、HttpServletRequest接口 HttpServletRequest接口是位于【javax.servlet.http】包下(对应servlet-api.jar包依赖),继承自【ServletRequest】接口。 HttpServletRequest接口定义了一些专门用于处理Http请求相关的方法,例如:获取Http请求参数、获取Http请求方式、请求头、请求地址等等。 HttpServletRequest接口作用:用于封装每个Http的请求相关信息。 阅读详情

相关推荐

事件相机(Event Camera)及相关研究简介——新一代相机?新的计算机视觉领域?

事件相机(Event Camera)及相关研究简介 事件相机是一个新型的类脑相机,是一个待开发的大领域。希望通过我的分享,能够有更多人来研究并将它更好地运用在我们的生活中~

Cyril的博客 5万+

请求转发和重定向

1.请求转发的概念(服务器行为) 请求转发指一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理。 请求转发一定要和HttpServletResponse.sendRedirect所表示的请求重定向区别开来! 什么意思?简单点来说,你是一名银行客户,现在你正在银行办理业务,你已经在窗口一挂上号了,你提出了要求,该窗口的银行工作人员无法帮你办理业务。于是他去沟通那个窗口能为你办理业务,沟通之后,让你去窗口二,你拿着窗口一挂的号去了窗口二,窗口二的工作人员从窗口一人员得道你的信息和你要

m0_61609890的博客 8544

Matlab2024a安装教程

点击【下一步】。8.选择解压后的【MATLAB R2024a(64bit)】文件夹中【Crack】文件夹下的【licese.lic】,点击【打开】。

qq_64359046的博客 4821

请求转发

一:请求转发的原理: 二:请求转发的定义: 这是一种在服务器内部的资源跳转方式.(换言之,请求转发是不能跳到服务器之外的资源) 三:步骤 1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path) 2....

Ng_Ho_Yin的博客 2677

DSPACE仿真平台的使用

DSPACE仿真平台的使用 文章目录DSPACE仿真平台的使用1.ModelDesk新建项目2.MotionDesk引入项目3.ControlDesk引入项目4.项目整合运行 我们使用DSPACE仿真平台软件来模拟小汽车的自动驾驶。 总共需要用到DSPACE大类下的三个软件:ModelDesk、ControlDesk、MotionDesk。 1.ModelDesk新建项目 在桌面上点击ModelDesk图标,打开DSPACE—ModelDesk 选择 File 标签,侧边栏选择 New,点击 New A

qq_42582489的博客 7528

TouchGFX在STM32上的移植全过程:超详细版指南

深入讲解将TouchGFX集成到STM32开发环境的每一步,涵盖配置、驱动适配与UI调试。无论是初学者还是进阶开发者,都能快速掌握TouchGFX在嵌入式平台的应用技巧。

weixin_42443533的博客 600

Servlet转发和重定向的区别

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、转发和重定向是什么?二、使用步骤1.引入库2.读入数据总结 前言 主要是探究servlet跳转也面的两个方式转发和重定向的区别 一、转发和重定向是什么? 当我们在登录页面的时候输入了账号密码然后点击登录按照正常的逻辑应该要跳转一个登录成功或者是失败的页面,那么如何跳转过去呢,这几就涉及到转发和重定向 转发 request.getRequestDispatcher(“填要去的页面”).forward(request,resp

a919119690的博客 1008

万字详解YOLOv8网络结构Backbone/neck/head以及Conv、Bottleneck、C2f、SPPF、Detect等模块

YOLOv8是由Ultralytics开发的最先进的目标检测模型,推升了速度、准确性和用户友好性的界限。YOLO这一缩写代表“你只看一次”(You Only Look Once),通过在一次网络传递中同时预测所有边界框,提升了算法的效率和实时处理能力。相比之下,其他一些目标检测技术需要经过多个阶段或过程来完成检测。YOLOv8在流行的YOLOv5架构上进行了扩展,在多个方面提供了改进。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 14万+

请求转发和响应重定向

什么是请求转发和响应重定向请求转发和响应重定向是web应用中间接访问项目资源的两种手段,也是Servlet控制页面跳转的两种手段请求转发通过HttpServletRequest实现,响应重定向通过HttpServletResponse实现请求转发生活举例: 张三找李四借钱,李四没有,李四找王五,让王五借给张三响应重定向生活举例:张三找李四借钱,李四没有,李四让张三去找王五,张三自己再去找王五借钱。

qq_40818172的博客 788

qtcreator使用远程服务器编译代码

我并没有找到很好的windows上可以用的rsync工具,最后是装了wsl来调用rsync同步到代码后,在用ssh调用linux命令来编译的。安装wsl安装ubuntu启动wsl然后把windows里的ssh文件证书和配置复制到wsl里同时config的key目录需要改一下,这样就可以登录服务器了然后在home目录创建build.sh进行远程编译。

习惯就好zz的专栏 1382

C#与欧姆龙PLC 通信——fins udp协议

该调试助手专门为了帮助大家学习以及测试Fins-Udp通信,下面进行详细介绍。

qq_34059233的博客 2875

请求转发(Forward)和重定向(Redirect)

1、重定向(Redirect) 是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL 1、工作原理: 用户第一次通过手动方式通过浏览器访问OneServlet,OneServlet工作完毕后,将TwoServlet地址写入到响应 头,localhost属性中,导致tomcat将302状态码写入到状态行。 在浏览器接收到响应包后,会读取到302状态,此时浏览器自动根据响应头中的localhost属性地...

兮遥 1万+

预测股票价格趋势:使用MATLAB进行股票价格预测

通过收集股票数据、数据预处理、构建预测模型以及可视化结果,我们可以利用MATLAB强大的计算和分析功能来预测股票价格的走势。然而,需要注意的是,股票市场具有高度复杂性和不确定性,预测结果仅供参考,并不构成投资建议。然而,借助计算机编程和数据分析工具,我们可以利用历史股价数据来建立模型,并预测未来的股票价格走势。首先,我们需要获取股票的历史价格数据。完成模型的拟合后,我们可以使用该模型来进行未来股票价格的预测。最后,我们可以使用MATLAB的绘图功能将预测的股票价格与实际股票价格进行对比,并进行可视化展示。

2301_79326588的博客 1018

【servelt原理_12_servlet应用_请求转发和重定向的区别】

【代码】【servelt原理_12_servlet应用_请求转发和重定向的区别】

edwer93的博客 168

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Servlet(2)----------请求转发和重定向原理分析及区别

1、什么是请求转发?        将两个servlet配合在一起,形成一个工作流,完成用户的一个请求。2、如何从AServlet跳到BServlet中       (代码实现) RequestDispatcher rd = request.getRequestDispatcher(目标servlet的url-pattern);                         rd.forward...

sun_boy的博客 1015

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Servlet之请求转发与重定向区别

前言                        在前面一片文章中笔者实现了一个简单的登录验证的功能,在验证中涉及到了两种页面                  跳转的方式  请求转发 和重定向。那么这两种方式到底有什么区别呢?在这篇文章中,笔者                  将结合实例进行探讨。         请求转发                     在实际的开发中我们

LCore的专栏 3416

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深入理解Servlet中请求转发和重定向的区别,看这一篇就够了!(建议收藏)

请求转发和重定向的区别一、请求转发1.1概念1.2代码1.3原理二、重定向2.1概念2.2代码2.3原理三、区别 转发和重定向是在Servlet中实现页面的跳转有两种方式 一、请求转发 1.1概念 客户端发送请求,Servlet做出业务逻辑处理。Servlet调用forword()方法,服务器Servlet把目标资源返回给客户端浏览器。 1.2代码 req.getRequestDispatcher("loginSuccess.jsp").forward(req,resp); var foo = 'b

weixin_46460843的博客 1586

Servlet中请求转发【 Forward】与重定向【Redirection】的区别

在Servlet中,请求转发(Request Forwarding)和重定向(Redirection)是用于控制请求流程的两种不同机制。

m0_73940426的博客 839

javaweb学习总结(九)——重定向请求和转发的区别

一、一次重定向的过程     我的代码里面已经写好了,redirectAndFoward.jsp页面上有一个表单,表单重定向到redirectAndFowardTarget.jsp,那么这一次的 重定向过程为: 1、以指定方式(表单看method,直接URL发起就是GET)发一次请求到后台,后台处理重定向,返回一个302的HTTP状态码给客户端,并在response里面带一个Location用...

laomumu1992的博客 1066

day04-请求转发的原理、请求转发与重定向的区别

day04-请求转发的原理、请求转发与重定向的区别 请求转发原理 (1)什么是请求转发 浏览器访问Servlet1,Servlet1将参数处理得到结果,没有直接返回给浏览器,而是将结果带给Servlet2,由Servlet2再处理之后返回给浏览器 (2)类比 面试者的简历给前台,前台收到之后转给面试官 (3)在哪里使用? 搜索功能 request-转发的代码实现 (1)方法 setAttribute(key,value) getAttribute(key) getRequestDispatcher("

renVictory的博客 234

请求转发和重定向的区别

请求转发req.getRequestDispatcher().forward(); 重定向resp.sendRedirect(); 前者的特点是服务器内转发,后者是让客户端重新发一次请求

web教程 203

转发和重定向的区别以及使用

https://blog.youkuaiyun.com/weixin_40001125/article/details/88663468

weixin_45521583的博客 152

请求转发 OR 重定向,在一个servlet中只能被使用一次

对servlet做了些测试,得出的结论是 1. 请求转发 OR 重定向,在一个servlet中只能被使用一次 2. 转发和重定向的执行顺序: 2-1. Servlet1(转发)—>Servlet2(转发)—>Servlet3(转发); 运行后: 1–>2–>3–>2—>1; 特点: 转发后会回到之前转发的servlet,继续执行后续代码; 2-2. Servlet1(重定向)—>Servlet2(重定向)—>Servlet3(重定向); 运行后: 1–>

老头学编程的博客 602

转发与重定向

转发&重定向请求转发图片示例代码示例重定向图片示例代码示例区别 请求转发 图片示例 代码示例 //第一个Servlet @WebServlet(value = "/first") public class UserServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,

qq_47953504的博客 185

java请求转发,响应重定向的区别

请求转发:request.getRequestDispatcher().forward();    例:request.getRequestDispatcher("/index.jsp").forward(request,response); 响应重定向:response.sendRedirect();          例:response.sendRedirec...

weixin_30369087的博客 171
上一篇: Servlet重定向(sendRedirect)流程简析
下一篇: Servlet中请求转发时forward()和include()的区别
JUSTWOSHISHUI
博客等级 码龄16年 3粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值