• 首页
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案
目录

forward和redirect的区别

forward和redirect是servlet的主要两种跳转方式,其中forward又叫转发,redirect又叫重定向。forward和redirect在请求方、浏览器地址表现以、参数传递以及底层运作等方面有区别。

一、forward和redirect的概念

forward与redirect是servlet的两种主要的跳转方式。forward又叫转发,redirect叫做重定向。

转发过程:客户浏览器发送http请求——>web服务器接受此请求—>调用内部的一个方法在容器内部完成请求处理和转发动作一>将目标资源发送给客户端;

在这里,转发的路径必须是同一个web容器下的URL,其不能转向到其他的web路径上去,中间传递的 是自己的容器内的request。在客户浏览器路径栏显示的仍然是其名列前茅次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

重定向过程:客户浏览器发送http请求一一>web服务器接受后发送302状态码响及对应新的location给客户浏览器——>客户端浏览器发现是302状态码,会自动再发送一个新的http请求,请求url是新的location地址一一>服务器根据此请求寻找资源并发送给客户端浏览器。

在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器地址栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

二、forward和redirect区别

1. 从地址栏显示来说   

forward是服务器内部的重定向,服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器。浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址。    

redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址。所以地址栏显示的是新的URL。

所以redirect等于客户端向服务器端发出两次request,同时也接受两次response;而forword只有一次请求。

2. 从数据共享来说    

forward:forward方法只能在同一个Web应用程序内的资源之间转发请求,是服务器内部的一种操作。由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用,所以可以共享数据。

redirect:redirect是服务器通知客户端,让客户端重新发起请求。redirect不仅可以重定向到当前应用程序的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。所以不能共享数据。

3. 从应用场景来说    

forward:一般适用于用户登陆的时候,根据角色转发到相应的模块。    

redirect:一般适用于用户注销登陆时返回主页面和跳转到其它的网站等.  

4. 从效率来说    

forward:效率高。   

redirect:效率低.

5. 从本质来说

forword转发是服务器上的行为,而redirect重定向是客户端的行为。

以上就是关于forward和redirect的知识希望对大家有帮助。

相关文章