JavaWeb 转发与重定向解读

转发与重定向解读


什么是转发和重定向?

举例说明:

我想去买某件衣服,我找到了你,你呢又不卖这件衣服,但是你知道哪里卖,那么你告诉我,我根据你告诉我的地址去那家店里买,这是重定向。

同样是这个例子:

我想去买某件衣服,我找到了你,你呢又不卖这件衣服,但是你知道哪里卖,你去他的店里买了来交给我,让我感觉就像是在你这里买的一样,这就是转发。


两者有什么区别?

转发是服务器行为,但是重定向不是,重定向是客户端行为。

重定向过程

浏览器发送http请求——>web服务器接受后发送302状态码响应及对应新的location给客户浏览器——>客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址——>服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

转发过程

客户浏览器发送http请求——>web服务器接受此请求——>调用内部的一个方法在容器内部完成请求处理和转发动作——>将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。




运行效果与实现

注意地址栏的地址变化情况

转发:


这里已经跳转到了test.jsp但是看地址栏当中的数据并不是test.jsp的地址信息,从这里可以看出,转发的过程是服务器的动作,是它帮你把所有的需要的东西拿来给你,不需要你知道怎么拿来的。本例子中只发送了一次请求。



重定向:


这里很明显地址栏的信息变化了,变为含有test.jsp的地址,可以说明是服务器给你地址,浏览器根据这个地址再次发送请求,然后加载的该界面。本例子中客户端浏览器请求了两次。


源代码链接:点击打开链接


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值