揭露forward和redirect的本质(区别)

前言

forward和redirect,一个转发,一个重定向,我们再熟悉不过了。回忆大二学习JSP,servlet的时候很多书中和网上的都有很多关于两者区别的介绍,大多数都是那几点,包括Struts2里的Action,SpringMVC里,几乎概念和原理都是一样的。今天处理一些问题的过程中,又让我想起来了它们2个及其区别,确实是,当时无论在大三还是准备面试时的大四,都经常特意的记忆和回忆一下它们的区别。现在的我,再一想,呵呵,与其“死记硬背”,不如我们就从本质上揭露它们一下,理解它们,然后再想想它们的区别,就会迎刃而解,在此呢,抛砖引玉,并把笔记本上记的东西搬到博客里,作为永久的参考记录,并与大家分享!

 

forward过程

转发,服务器端行为。web服务器把接受的请求,调用内部的方法在容器内部完成请求处理和转发动作,然后响应客户端,在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。

redirect过程

重定向,客户端行为。客户端发送http请求,web服务器接受后发送3**状态码响应及对应新的location给客客户端,客户端发现是3**响应,则自动再发送一个新的http请求,请求url是新的location地址,在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。重定向行为是浏览器做了至少两次的访问请求的。

通俗的比喻

forward:你先去A局办事,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。

redirect:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局办。

当然,这个比喻也不是很准确,理解表达的意思就行。

进而带来的区别

forward方式客户端肯定不知道啊,所以地址栏不变,中间过程加上其他参数地址栏也看不到,转发的url肯定不能是外部的,直接在服务器端内部的周转,所以request的参数能在新的方法里获取到,所以效率也比较高一些。redirect方式就与其相反了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值