转发与重定向

在JavaWeb中有个重要的概念,那就是转发与重定向。在之前我都是死记硬背这两者的,但也经常忘记。昨天我们老师给我们举了一个例子,我却一下就理解这两个的区别了。

转发与重定向的区别

请求的转发:地址栏是初次请求的地址
请求的重定向:地址栏不再是初次请求的地址。地址栏为最后响应的那个地址

请求的转发:最终的Servlet对象和中转的Servlet是同一个对象
请求的重定向:最终的Servlet对象和中转的Servlet不是是同一个对象

请求的转发:只能转发当前 WEB 应用程序中的资源
请求的重定向:可以重定向任何资源

请求的转发:/代表当前WEB应用的根目录
请求的重定向:/代表当前WEB站点的根目录

这样看可能会有点难以理解和记忆,但结合一个例子就很好理解了。
一天,小张向老王借钱,这时老王手里没钱,于是就告诉小张,说“我手里没钱,不过李总手里有,你去找他借”。小张就去找李总借钱,李总手里有钱,就借给了小张。
这时美女小刘又找老王接钱,但老王手里没钱,他不想在小刘面前丢脸,于是他就去找李总借钱,于是李总也借钱给老王,老王这时就把这钱借给了小刘。
转发与重定向
在这里,小张借钱的过程就是重定向:首先小张提出借钱的请求(浏览器发出资源请求),老王看自己没钱,于是就告诉小张去找李总借钱(服务器响应,服务器没有它需要的资源,于是发给浏览器一个新地址,让它去新地址获取资源),小张向李总借钱,李总借钱给小张(浏览器向新地址/服务器发出资源请求,其它服务器有它要的资源,于是给它)。
在重定向中,浏览器发出了两次请求获得了两个servlet的响应,其地址栏为最终地址。
小刘借钱的过程就是转发,首先小刘提出借钱(浏览器发出资源请求),老王看自己没钱,于是去找李总借钱(服务器自己没有资源,于是去其它地方获取资源),老王把借来的钱在借给小刘(服务器把获取来的资源发给浏览器)。
转发过程中,浏览器只发出了一次请求,其中转servlet和最终servlet是同一个,地址栏也为最初的地址。

总结

转发
当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。使用转发时,该URL会保持不变。

request.getRequestDispatcher("/url").forward(request, response);

重定向
重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。使用重定向时,浏览器中所显示的URL会变成新页面的URL。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。

response.sendRedirect(“url”);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值