首页 > 其他 > 详细

转发和重定向

时间:2021-04-06 15:14:17      阅读:11      评论:0      收藏:0      [点我收藏+]

什么是转发与重定向

日常我们使用浏览器最常用的就是在不同的页面中跳转,而在Servlet中的页面跳转使用的就是转发和重定向,也可以简单的认为转发和重定向就是实现页面的跳转,但是肯定是有区别的

转发

request.getRequestDispatcher("xxx.jsp").forward(request,response);这个例子就是一个简单携带request和response的转发,从这句代码分析我们可以得知,这个转发需要request对象,我们加入源码查看.getRequestDispatcher(String path)这个方法的返回值是一个RequestDispatcher对象,百度得知这个类是一个Web资源包装器,查看源码发现有两个方法forward()include()(那肯定是主要介绍forward()方法哈,有兴趣可以自行百度两个方法的详解)forward()用来转发request和response给指定的web资源,看到这里应该对这个代码有了一点理解了,首先将web资源路径传递到RequestDispatcher对象中,再调用forward方法将request和response一起传递给指定的web资源,实现携带请求转发

重定向

response.sendRedirect("https://www.baidu.com");实现简单的重定向,本质也是跳转

共同点

本质都是实现页面的跳转

不同点

  1. 地址栏
    • 转发的地址栏不会改变由于转发是在服务端进行的,浏览器并不知道,所以只会显示浏览器请求的页面地址
    • 重定向的地址栏会改变,跳转发送在客户端
  2. 请求次数
    • 转发没有产生新的请求,是同一个请求
    • 重定向产生了新的请求
  3. request域
    • 转发由于是同一个请求,所以request域不变
    • 重定向request域发生改变
  4. 跳转范围
    • 转发只限制在当前web项目中
    • 重定向没有限制,任何web资源(包括网络上的web资源)
  5. 跳转方式
    • 转发使用RequestDispatcher对象的forward()
    • 重定向用response.sendRedirect()

转发与重定向的浅层原理

转发原理

技术分享图片

重定向原理

技术分享图片


  1. 什么时候用转发,什么时候用重定向?

    当我们需要携带数据存进request域中保存,跳转界面读取request域中的数据,这个时候我们需要用到转发。

    不需要携带数据,只进行请求处理并不暴露Servlet进行跳转,可以用重定向

    判断什么时候用转发还是重定向可以从以下几点判断

    • request域
    • 地址栏

当然这只是一个参考,具体业务具体分析,还需要注意的是无论是转发还是重定向,后续代码还是会运行,并不会跳转而停止,除非手动return

转发和重定向

原文:https://www.cnblogs.com/cndada/p/14621515.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!