您的位置:首页 > Web前端 > JavaScript

揭露forward和redirect的本质(区别)—老事重谈!

2015-04-13 08:49 274 查看

前言

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方式就与其相反了!

转载请注明—作者:Java我人生(陈磊兴)   原文出处:http://blog.csdn.net/chenleixing/article/details/45021257

最后,认真看过的网友们,大神们,如有感觉我这个程序猿有哪个地方说的不对或者不妥或者你有很好的提议或者建议或点子方法,还望您大恩大德施舍n秒的时间留下你的宝贵文字(留言),以便你,我,还有广大的程序猿们更快地成长与进步.......

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息