我们先硬着头皮看一下重定向的定义:

重定向(Redirect):

客户端浏览器向Web应用服务器端发送一个请求,Web服务器端使用HttpServletResponse的sendRedirect()方法将结果(结果中头信息内HTTP状态码为302,Location响应报头域中保存响应回来的地址)返回给客户端浏览器;客户端浏览器收到服务器端结果后解析其头部信息,然后自动按照头部指定地址以GET方式再次向Web应用服务器端发请求,此时地址栏URL发生变化,服务器端接收到新的请求再将结果返回至客户端浏览器,客户端浏览器解释执行返回结果并将执行结果显示给用户,至此该过程结束。

或许有人看的头大,也有人可能明白了一点,都不要紧,我来解释一下,通俗点说,就是客户端浏览器向Web应用服务器端发送了两次请求,Web应用服务器也返回了两个执行结果给客户端浏览器,只是第一次发请求是手动的,而第二次是自动的。

其中的302是HTTP协议中的一个状态码,百度百科上是这样说的:

对于服务器,通常会给浏览器发送HTTP Location头部来重定向到新的新位置。

用通俗的话说就是,http约定好了,只要浏览器收到服务器给的302,那就是让我(浏览器),再一次提交请求,而这次的请求与上次(请求的是servlet)的不一样,这次请求的是response.sendRedirect("./target.jsp");中的target.jsp页面(当然引号里面是你自己写的目标路径,我这个只是做演示用的,你完全可以写https://www.baidu.com,那第二次请求访问的就是百度页面了)。


这次应该对重定向有大致了解了吧,那我们接着看请求转发的定义:
请求转发(Forward):

这里的“请求”是名词,请求转发指客户端浏览器向Web服务器端发送请求,服务器端收到请求后进行相应处理后再将该请求转发到另外的资源(即这一“转发”操作是在Web服务器端执行的),服务器端对该资源进行处理后反馈给客户端

从定义中我们可以看出请求转发与重定向不同,请求转发客户端浏览器只向Web服务器端发送一次请求,服务器端也只给客户端返回一次处理结果。(其实请求转发最后服务器端也给客户端发了一个状态码:200,表明这个请求已经成功)。

我们来看一个请求转发的代码:request.getRequestDispatcher("./target.jsp").forward(request, response);,我们查一下Dispatcher的意思是调度员,所以请求转发也可以这样理解:客户端浏览器向Web应用服务器发送一次请求(访问servlet),然后服务器端处理到request.getRequestDispatcher("./target.jsp").forward(request, response);改行代码时,知道要跳转了,(这时不需要反馈给客户端)而是直接转发到另外的资源,处理后一并反馈给客户端,此时浏览器地址栏显示的是第一次访问的原地址。(而重定义过程结束后,地址栏中显示第二次访问的地址。)


我们再来说一下它们的区别:
重定向和请求转发的区别:

  1. 其实第一个区别我们在上面已经说过了, 但为了便于方便查找,以及保证文章结构清晰,我就再赘述一遍:重定向是浏览器客户端向Web应用服务器端发送两次请求,服务器端也向客户端返回两次处理结果,最后在浏览器地址栏中显示的是第二次访问的地址;而请求转发是浏览器向Web应用服务器端发送一次请求,服务器端也只向客户端返回一次处理结果,最后在浏览器地址栏中显示的是第一次访问的原地址。
  2. 第二个区别是页面的跳转,还记得上面介绍重定向时说过的response.sendRedirect("./target.jsp");吗?引号里也可以写https://www.baidu.com,这样第二次访问的页面就是百度了。所以第二个区别就是重定向对页面的跳转没有限制,可以是本Web应用系统的资源,也可以是其他Web应用的资源;而请求转发处理页面跳转时,跳转的新地址必须是本Web应用系统的资源,不可以访问其他Web应用的资源。
  3. 第三个区别是重定向无法在新的页面获取request.setAttribute("key", "value");中保存的数据,若非要使用<%= request.getAttribute("key") %>获取,则获取到的值为null;而请求转发就可以在新的页面获取到request.setAttribute("key", "value");中保存的数据。
  4. 最后一个区别可以说是请求转发的一个特性:Web项目中WEB-INF文件夹是最安全的目录,该目录内的资源只能通过请求转发获取,重定向的方式无法获取!

JSP中的重定向和请求转发以及它们的区别相关推荐

  1. HTTP中的重定向和请求转发的区别

    一.调用方式 我们知道,在servlet中调用转发.重定向的语句如下: request.getRequestDispatcher("new.jsp").forward(reques ...

  2. 请求转发和重定向的区别_WEB之重定向和请求转发的区别

    一次重定向的过程 我的代码里面已经写好了,redirectAndFoward.jsp页面上有一个表单,表单重定向到redirectAndFowardTarget.jsp,那么这一次的重定向过程为: 1 ...

  3. 相对地址与绝对地址的区别?请求重定向与请求转发的区别?jsp有哪九大内置对象?servlet如何获取session和application对象?

    目录 1.说说相对地址与绝对地址的区别? 2.说说请求重定向与请求转发的区别? 3.jsp有哪九大内置对象?servlet如何获取session和application对象? 1.说说相对地址与绝对地 ...

  4. 分析:重定向和请求转发

    分析:重定向和请求转发 重定向 HttpServletResponse对象的sendRedirect(java.lang.String location)方法称作重定向. 如果location地址前面 ...

  5. 重定向与请求转发的区别及什么时候使用

    重定向与请求转发的区别 一 转发是服务器行为,重定向是客户端行为.为什么这样说呢,这就要看两个动作的工作流程: 转发过程:客户浏览器发送http请求-->web服务器接受此请求-->调用内 ...

  6. SpringMVC重定向与请求转发

    SpringMVC重定向与请求转发 一,请求转发 ①请求转发地址栏不会发生改变 ②请求转发只发送一次请求.能携带原有的参数 ③请求转发只可以在同一个服务器中进行转发 ④实际上视图解析器的转发本质也是请 ...

  7. 重定向与请求转发的具体讲解

    本篇供个人学习使用,有问题欢迎讨论 多个Servlet来处理同一次请求方案 一.前提 1.一个 servlet 只负责实现一个功能 2.浏览器在一次请求时,只能请求一个资源文件 3.如果浏览器的请求需 ...

  8. 3.相应重定向与请求转发的比较

    响应重定向与请求转发类似,但有下面的区别: (1)RequestDispatcher对象是一个Web资源的包装器,可以用来把当前请求转发到该资源.这种转发是服务器端控制权的转向,客户端发来的请求将交由 ...

  9. java | (二十五)Servlet(1)req,resp,重定向,请求转发,数据共享

    今天(2021.9.24)开始学习一些有难度的知识了,如题 先安装和配置好Tomcat,具体下载和idea的配置可以参考 目录 开发步骤 Servlet对象生命周期 httpServletRespon ...

最新文章

  1. Git学习教程(六)Git日志
  2. JS DOM 对象
  3. ubuntu下安装chromium及其pepperflash
  4. 竞赛准备篇---(一)抽签问题
  5. rust为什么显示不了国服_Rust编程语言初探
  6. 0网卡开启_中标麒麟Linux v7系统下设置双网卡bond或team绑定详细过程
  7. Linux /proc目录详解
  8. T-SQL(SQL Sever) 简单语句实例
  9. 救命!!连接Oracle问题,在线等!
  10. ppt使用记录之添加带圈的20以内的数字编号
  11. codeforces 123D. String(后缀数组+单调栈,好题)
  12. servlet中使用db4o
  13. FDDB评估工具使用
  14. 基于stc15f2k60s2芯片单片机编程(计算器,不完美)
  15. css代码 文字超出点点点
  16. window10安装kubectl工具及配置config信息
  17. AI绘画怎么生成?这些软件帮助你实现
  18. 【人工智能毕设之基于Python+flask+bilstm的评论情感分析系统-哔哩哔哩】 https://b23.tv/QU56eTl
  19. 使用linux 中的 tree 指定显示深度,显示文件目录结构
  20. android7 强制gpu渲染,安卓手机开启强制GPU渲染功能的方法

热门文章

  1. Excel导入异常Cannot get a text value from a numeric cell解决
  2. 求二维数组最大子数组
  3. Android网络编程系列 一 Socket抽象层
  4. 使用 TFDConnection 的 pooled 连接池
  5. [转]自定义hadoop map/reduce输入文件切割InputFormat
  6. DIV布局SEO的影响
  7. HTTP协议中的Tranfer-Encoding:chunked编码解析
  8. F5负载均衡会话保持技术及原理技术白皮书
  9. 在.NET环境下发送邮件
  10. 在做会员资料修改时,实现下拉菜单的默认项定位