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

一、调用方式

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

request.getRequestDispatcher("new.jsp").forward(request,response);//转发到new.jsp
response.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提交。)

    (未登录CSDN的用户相对某篇博客进行评论,点击登录,成功登录之后重定向到之前的博客页码)


猜你喜欢

转载自blog.csdn.net/qq_26545305/article/details/55001656