(1)实现过程差异
重定向过程:客户浏览器发送http请求----》web服务器接受后发送302响应要求客户浏览器发送一个新的http请求----》客户端浏览器接受此响应后在发送一个新的http请求到服务器----》服务器根据此请求寻找资源并发送给客户
转发过程:客户浏览器发送http请求----》web服务器接受此请求后调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户
用户点击一个地址连接(采取重定向方式)后浏览器发送一个http请求(若请求页面附带参数则参数名/值随此http请求一同发送到服务器);经服务器处理后返回一个302响应通知客户端浏览器发送一个新的http请求,302响应内容见下图
........
location:
http://127.0.0.1:8080/result.jsp?username=foo&password=bar
........
上为服务器发送302响应中部分内容.说明见下:
(审视Location响应首部你将发现服务器通知了客户新的请求应该指向哪个URL,任何附加在原来请求之上的URL参数,都会出现在新的请求中,当浏览器发出新的请求时,这些参数也会跟着发送出去,只是参数值为NULL,这是因为当浏览器发送新的请求时前一请求中以“请求属性“存储的对象都将消失)
客户端浏览器接受到此302响应后立刻再发送一个新的http请求到服务器端,服务器接受此请求后寻找客户请求资源并发送到客户端。如此重定向的整个过程就全部完成。而进行转发时,目标页面是通过JSP容器的一个内部方法调用加以调用的(并非像重定向通过两次请求处理),新页面继续处理同一请求。
(2)使用差异
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。速度较转发慢
转发:以前的request中存放的变量不会失效,两个页面共享同一个request作用域。除特殊几个采用重定向方式的动作外一般默认为转发方式
转发注意事项:
如果在JSP页面中使用相对路径来指向图象文件或其他资源,转发就可能会出现错误。因为浏览器并不知道转发已经发生,相对路径的源头依然是最初的servlet而非以转发的JSP。
例如:
目录A/a.jsp 目录B/b.jsp 目录B/c.png
假设a.jsp通过转发调用b.jsp,而b.jsp页面中使用相对路径调用c.png图象文件,则服务器肯定会报错,因为浏览器并不知道转发已经发生,仍然错处的认为c.png文件的相对路径的源头是a.jsp所在目录而非b.jsp所在目录。但重定向就不成在这样的问题。故一般使用绝对路径
重定向与转发差异方面的小结
最新推荐文章于 2025-08-08 11:40:36 发布