转发(forward)和重定向(redirect)的区别

转发是服务器行为,重定向是客户端行为。

转发(Forward) 是通过 RequestDispatcher 对象的 forward(HttpServletRequest request,HttpServletResponse response)方法实现的,而 RequestDispatcher 可以通过 HttpServletRequest 的 getRequestDispatcher() 方法获得。例如下面的代码就是跳转到success.jsp 页面。

     request.getRequestDispatcher("success.jsp").forward(request, response);

重定向(Redirect) 是通过服务器返回状态码(301、302)来实现的。客户端发起请求后,服务器会返回一个状态码,服务器一般通过 HttpServletResponse 的 setStatus(int status) 方法设置状态码。当服务器返回301或者302,则浏览器会到新的网址重新请求新的资源。

  • 从地址栏显示来说

forward 是服务器请求资源,服务器直接访问目标地址的 URL,把目标站点响应的内容读取过来,然后把这些内容再发给浏览器,而浏览器不需要关注这些内容是从哪里来的,,所以它的地址栏不会发生变化。redirect 是服务端根据逻辑,响应一个状态码,告诉浏览器重新去请求某一地址,所以地址栏显示的是新的 URL;

  • 从数据共享来说

forward:原页面和目标页面可以共享 request 里面的数据; redirect:不同页面之间不能共享数据;

  • 从运用地方来说

forward:一般用于用户登陆时,根据角色转发到相应的模块; redirect:一般用于用户注销时,返回到重新登录的那个页面;

  • 从效率来说

forward:高 redirect:低

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏冷冷

Spring Cloud Gateway 数据库存储路由信息的扩展方案

​ 无论你在使用Zuul还是Spring Cloud Gateway 的时候,官方文档提供的方案总是基于配置文件配置的方式

11030
来自专栏小灰灰

180807-Quick-Task 动态脚本支持框架之Groovy脚本加载执行

上一篇简答说了如何判断有任务动态添加、删除或更新,归于一点就是监听文件的变化,判断目录下的Groovy文件是否有新增删除和改变,从而判定是否有任务的变更;

11220
来自专栏机器学习入门

算法细节系列(1):Java swap

在C++中,swap算法可以用指针来实现,因此在Java中,如果采用如下代码来对两个数字进行交换时,也不会影响两个对象的值。

14420
来自专栏琦小虾的Binary

JavaSE 基础学习之六 —— Java 的反射操作

万事万物都是对象。我们平常接触到的类,本身也是一种对象,它的类型是 Class,也可以说 Class 是类的类型,即类类型 (Class Type);任何一个类...

11120
来自专栏魏晓蕾的专栏

Java DecimalFormat用法详解

我们经常要将数字进行格式化,比如取2位小数,这是最常见的。Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化为你需要的样...

13120
来自专栏源哥的专栏

ajax 开源项目 DWR

ajax开源项目dwr的使用: 利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值 给JavaScript就好像直接本地客户端调...

11720
来自专栏冷冷

Spring Cloud Gateway 接口文档聚合实现

​ 在微服务架构下,通常每个微服务都会使用Swagger来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,毕竟懒是程序员的美德。

34420
来自专栏小灰灰

180918-JDK之Deflater压缩与Inflater解压

在实际的应用场景中,特别是对外传输数据时,将原始数据压缩之后丢出去,可以说是非常常见的一个case了,平常倒是没有直接使用JDK原生的压缩工具类,使用Proto...

9810
来自专栏DT乱“码”

大数据学习有感

最近在学习大数据技术,很多东西豁然开朗。总得来说一句话,如果懂得Java,不去学习大数据那叫不思进取。如果懂得数学,不去搞人工智能,那是书呆子。

16320
来自专栏一只想做全栈的猫

【前端面试】字节跳动2019校招面经 - 前端开发岗(二)

querySelectorAll()返回的是DOM原生element对象 而jQuery的选择器返回的是jQuery的包装对象,同时包含了原生DOM对象和一些j...

15210

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励