重定向和转发的区别及应用[通俗易懂]

重定向和转发的区别及应用[通俗易懂]重定向重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL,而当使用转发时,该URL会保持不变。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

重定向

重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。

sendRedirect()这个方法属于response的方法,当这个请求处理完之后,看到response.senRedirect(),将立即返回客户端,然后客户端再重新发送一个请求,去访问xx.jsp页面。

重定向流程为:客户端请求—-响应,遇到sendRedirect(),返回响应—-客户端再次请求xx.jsp页面—-响应。
这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。

总结一下:在response.sendRedirect(“xx.jsp”);里面是两个请求,两个响应,地址栏会发生改变。


public void doPost(HttpServletRequest request,HttpServletResponse response)
         throws ServletException,IOException
{ 
   
         response.setContentType("text/html; charset=gb2312");
         response.sendRedirect("/index.jsp");
}

转发

是在服务器端起作用,当使用forward()时, Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的 form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传 递.
但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在 后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过 response.setAttribute(“name”, name)来传至下一个页面.

转发后浏览器地址栏URL不变.


public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ 
   
         response.setContentType("text/html; charset=gb2312");
         ServletContext sc = getServletContext();
         RequestDispatcher rd = null;
         rd = sc.getRequestDispatcher("/index.jsp");      //定向的页面
         rd.forward(request, response);
}

如何选择

怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。

(1).Request Dispatcher.forward()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
(2).response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。
前者更加高效,在前者可以满足需要时,尽量使用RequestDispatcher.forward()方法.

综上,转发和重定向的区别 :
不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196098.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大数据开发工作辛苦吗?「建议收藏」

    大数据开发工作辛苦吗?「建议收藏」大数据开发工作辛苦吗?现在的社会是一个高速发展的社会,科技发达,信息流通,人们之间的交流越来越密切,生活也越来越方便,大数据就是这个高科技时代的产物。大数据并不在“大”,而在于“有用”。价值含量、挖掘成本比数量更为重要。因此对大数据的开发和分析对一个企业来说显得尤为重要。大数据开发人才也变得炙手可热。虽然大数据相关人才很受欢迎,但是有些人担心做了大数据开发之后,加班太多,会比较辛…

    2022年5月4日
    62
  • new 命令的原理[通俗易懂]

    new 命令的原理[通俗易懂]new 命令的原理

    2022年4月20日
    43
  • Python六大基本数据类型介绍[通俗易懂]

    Python六大基本数据类型介绍[通俗易懂]Python基本数据类型一、整型1、整型:int2、二进制整型二、浮点型三、布尔型四、复数类型五、字符串六、列表七、元组八、集合一、整型1、整型:int在数字中,正整数、0、负整数都称为整型。例:intvar=1000#type获取数据类型res1=type(intvar)print(res1)#id获取内存地址res2=id(intvar)print(res2)运行结果:2、二进制整型也可用二进制表示整型,print自动转换为十进制。例:intvar=

    2022年5月13日
    40
  • 2020美赛C题解题思路(A Wealth of Data)[通俗易懂]

    2020美赛C题解题思路(A Wealth of Data)[通俗易懂](占个坑,B题已写完并发布,现正写C题)《数学建模想获奖?国赛、美赛看这一个就够了》——数学建模的进阶指南!内容全面、门类齐全,包含组队、日常训练、算法(含MATLAB代码)、建模、写作和“高校内部培训资源”等诸多方面的指导!千载难逢、不容错过!——有条件的朋友们支持一下,谢谢!需要“数学建模国赛美赛资源包”的关注公众号“猫和真人”,回复“1”即可获得资源包,有条件的支持一下哈!…

    2022年4月29日
    49
  • IPV6服务器搭建「建议收藏」

    IPV6服务器搭建「建议收藏」环境准备:1.安装虚拟机(virtualbox)2.在虚拟机中安装Ubuntu系统3.dhcp-4.2.5.tar源码 配置虚拟机环境:1.配置虚拟机gcc命令,快捷键:CTRL

    2022年8月2日
    6
  • 倘若对一个人好是一种错误_gta5出现了一个错误

    倘若对一个人好是一种错误_gta5出现了一个错误在一个项目中,我把167行的写成了,竟然报了如下错误:Parseerror:syntaxerror,unexpected$endinE:\wamp\www\tmlog\index.phponline186感觉好恶心,以后注意点。

    2022年10月19日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号