您的位置:首页 > 编程语言 > Java开发

JavaWeb 转发与重定向解读

2015-10-28 19:08 483 查看

转发与重定向解读

什么是转发和重定向?

举例说明:

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

同样是这个例子:

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



[b]两者有什么区别?[/b]

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

[b]重定向过程[/b]

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

[/b]

[b]转发过程[/b]

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










运行效果与实现

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

转发:






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






重定向:






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






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