`
xiebh
  • 浏览: 603996 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

请求转发(Forward)和重定向(Redirect)之间区别与联系

阅读更多
一个比喻:
小张向小李发送一次请求,想让他完成某项工作,当小李接受到请求时,发现自己完成不了,又请求小王帮忙,小王接收到小李请求之后最终完成了该项工作,并把最后的结果交给了小张。这个过程就是请求转发,在此期间,小张只发送了一次请求,他只知道把任务交给了小李,至于小李是如何完成的,小张并不知道,他只等待最终的结果。
重定向则不同,首先小张向小李发送请求,想让他完成某项工作,当小李接收到这个请求时,发现自己完成不了,他立即通知小张,并推荐小王可以完成任务,于是小张又联系小王,最终小王完成了该项任务。
区别:
1、浏览器地址栏显示不同(表面区别)
无论进行多少次请求,如果使用请求转发来实现,浏览器地址栏中只显示第一次发送请求的地址;如果使用重定向来实现,浏览器地址栏显示的是每次请求的新地址。这只是表面上看到的不同地方。
2、组件之间可否共享信息不同(本质区别)
从本质上讲,请求转发时,从发送第一次到最后一次请求的过程中,WEB容器只创建一次request和response对象,请求之间始终共享这两个对象,所以每个请求可以访问他之前请求中的参数和属性的值;而重定向时,浏览器每发送一次请求,WEB容器都会重新创建新的request和response对象,所以请求之间不能共享信息,即不能在请求中访问到他之前请求中的参数和属性的值。
3、实现方式不同
请求转发的实现步骤:
  • 说明将要转发的资源;
  • 获取请求转发的对象;
  • 调用请求转发对象中forward()方法

String forward = "/a.jsp";
RequestDispatcher rd = request.getRequestDispatcher(forward);  
rd.forward(request, reponse);

重定向的实现步骤:
  • 说明将要重定向的资源;
  • 调用response对象中sendRedirect方法

String resource =  request.geContextPath() + "/a.jsp";
response.sendRedirect(resource);

4、知情人不同
请求转发时转发的过程只有WEB服务器知道,而浏览器不知道进行了多少次转发,以及都转发给哪些组件(servlet,JSP),它只是在等待WEB服务器最终的结果。而重定向时,每发送一次请求,WEB服务器都会通知浏览器的,所以重定向了几次请求以及每次都向哪个组件发送的请求,浏览器很清楚,当让WEB服务器也很明白。
相同点:
两者都可以进行多次请求的转发。
分享到:
评论

相关推荐

    javaweb转发和重定向

    javaweb请求转发的简单实例,演示了forward()方法和getRequestDispatcher()的不同之处

    java中dispcter和forward的区别

    dispcter和forward的区别 RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()...2、forward与include基本上都是转发到context内部的资源,而redirect可以重定向到外部的资源,如: req.sendRedriect

    JAVA基础知识点汇总

    10、Servlet中的forward和redirect有什么区别: Forward是服务器内部的重定向,服务器直接访问目标地址的url,地址不变。 Redirect:客户端的重定向,完全跳转,地址改变。 11、JSP的内置对象: 1)require(请求对象...

    java面试题

    forward和redirect的区别? 答:forward是转发,浏览器跳转后不显示新的地址。 redirect是重定向,浏览器跳转后显示新的地址。 对比之下forward更加高效,并且它有助于隐藏实际地址,但是有些情况则必须使用...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【WEB】转发(forward)和重定向(redirect)的区别 38 forward(转发): 38 redirect(重定向): 39 区别: 39 【WEB】实现会话跟踪的技术有哪些? 40 【WEB】什么是ORM 42 【反射】反射中,Class.forName和...

    将properties文件的配置设置为整个Web应用的全局变量实现方法

    2、request:请求域,在一次请求中有效,如果用forward转向,则下一次请求还可以保留上一次request中的属性值,而redirect重定向跳转到另一个页面则会使上一次request中的属性值失效; 3、session:会话

    千方百计笔试题大全

    187、JAVA SERVLET API中forward() 与redirect()的区别? 44 189、Can a Java Thread be started from Servlet class, and what will be the implications? 45 190、What is ...

    java面试宝典

    145、与之间的差别? 36 146、JSP的缺点? 36 148、如何实现JSP的国际化? 36 150、如何在JSP中包括绝对路径文件? 使用URLConnection即可。 37 151、在servlets和JSP之间能共享session对象吗? 37 152、如何设置...

    JSP实例编程100例

    73、forward重定向 74、文件的建立与删除 75、取得文件属性 76、取得目录中的文件 77、目录的建立与删除 78、自Cookie存取日期/时间数据 79、管理Session变量 80、数据库中的记录数与记录指针位置 81、利用absolute...

    JAP编程学习100例

    73、forward重定向 74、文件的建立与删除 75、取得文件属性 76、取得目录中的文件 77、目录的建立与删除 78、自Cookie存取日期/时间数据 79、管理Session变量 80、数据库中的记录数与记录指针位置 81、利用absolute...

    构筑Linux防火墙之IPtables的概念与用法

    iptables读取流入和流出的数据包的报头,然后将它们与规划集(ruleset)相比较,然后将可接受的数据包从一个网卡转发至另外一个网卡。对于被拒绝的数据包,可以被丢弃或者按照你所定义的方式来处理。 <br>通过向...

Global site tag (gtag.js) - Google Analytics