找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3792|回复: 0

剖析转发和重定向

[复制链接]
发表于 2012-2-3 13:11:52 | 显示全部楼层 |阅读模式
做JavaWeb开发一定会遇到转发和重定向这两个名字,刚开始确实有些模糊,感觉两者非常相似,但是随着研究深入发现两者的本质相差甚远。

首先看书写语句:

                   转发:request.getRequestDispatcher("apage.jsp").forward(request,response);//转发到apage.jsp
                               或者<jsp:forwardpage="apage.jsp" />(仅在jsp页面实现)

                   重定向:response.sendRedirect("apage.jsp");//重定向到apage.jsp



再看原理:

转发:


转发过程:


         客户浏览器发送http请求---web服务器接受此请求后调用内部的一个方法在容器内部完成请求处理和转发动作----将目标资源发送给客户。
        它只能在同一个web应用中使用,可以共享request范围内的数据。

重定向:



重定向过程:


         客户浏览器发送http请求---web服务器接收后响应要求客户浏览器发送一个新的http请求----客户端浏览器接受此响应后在发送一个新的http请求到服务器----服务器根据此请求寻找资源并发送给客户。
        它可以重定向到任意URL,不能共享request范围内的数据。
   


通过上面的原理就能看出两者本质上是非常有区别的,转发是和服务器有一次交互,服务器对请求在内部进行了“传递”,而重定向是和服务器有两次交互(甚至更多),服务器首先通过对请求的处理之后要求客户端在发送一个请求,之后完成“转向”。

最后总结一下两者的不同点:
  

转发:
     1.  不会改变浏览器的地址栏
     2.  共享一个请求
     3.  只能在同一个web应用中使用
重定向:
     1.  浏览器中地址栏改变
     2.  不共享请求
     3.  可以重定向到任意的URL
作者:lfsf802 发表于2012-2-3 11:17:31 原文链接

您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-22 17:34 , Processed in 0.016987 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表