[HTTP]转发和重定向的区别

来源:互联网 发布:九泰基金 知乎 编辑:程序博客网 时间:2024/05/16 18:39

一、调用方式

    众所周知,在servlet中调用转发、重定向的语句如下: 

request.getRequestDispatcher("new.jsp").forward(request,response);//转发到new.jspresponse.sendRedirect("new.jsp");//重定向到new.jsp
    而在Jsp页面中实现转发和重定向的方式如下:

<jsp:forward page = "new.jsp"> //转发的new.jsp<%response.sendRedirect("new.jsp");%> //重定向到new.jsp


二、基本流程

1、转发过程:

    转发不会改变浏览器的地址;共享同一个request;只能在同一个web应用中使用。客户感觉不到服务器做了转发,转发行为是浏览器只做了一次访问请求(request)。转发是不会改变地址的,只是服务器内部的类方法调用而已。

                   

举个栗子:

   来个小故事,你看上了一个非常漂亮的妹子,每天打电话嘘寒问暖,可你不知妹子已有男友。终于有一天,妹子把自己的电话设置了呼叫转移。转移到了自己男友的手机号上。当你在打电话“骚扰”时,被她男友痛骂了一段。

   这里的“呼叫转移”就和转发特别像。首先你拨打的是妹子的电话,但你感觉不到你所拨打的电话已转移到了她男友手机号上。用计算机术语叫。你向妹子的手机号发送了一个请求,妹子将这个请求转发到自己男友手机号上。你只做了一次访问请求。所拨打的电话号码并没有改变。

2、重定向:

   重定向会改变浏览器的地址栏;它不共享request;可以重定向到任意的URL。客户可以观察到地址栏的变化。相当于,客户端向服务器端发出多次请求。因此,重定向行为浏览器至少做了两次访问请求(request)。

                      

一句话,转发是在服务器端发生的,重定向是在客户端发生的。

转发和重定向比较:

        


三、应用场景:

    forward:访问Servlet处理业务逻辑,然后转发到Jsp显示处理结果,浏览器的URL不变。

    redirect:提交表单,处理成功后redirect到另一个jsp,防止表单重复提交。浏览器里的URL改变。(一般来说对于登陆、注册,现在网站都是用ajax提交。)









1 1
原创粉丝点击