转发
转发是指浏览器发送请求到servlet1之后,servlet1需要访问servlet2,因此在服务器内部跳转到的servlet2,转发有时也称为服务器内跳转。整个过程浏览器只发出一次请求,服务器只发出一次响应。所以,无论是servlet1还是servlet2,整个过程中,只存在一次请求,即用户所提交的请求。因此servlet1和servlet2均可从这个请求中获取到用户提交请求时所携带的相关数据。
重定向
重定向是浏览器发送请求到servlet1之后,servlet1需要访问servlet2,但并未在服务器内直接访问,而是由服务器自动向浏览器发送一个响应,浏览器再自动提交一个新的请求,这个请求就是对servlet2
的请求。
对于servlet2的访问,是先由服务器响应客户端浏览器,再由客户端浏览器向服务器发送对servlet2的请求,所以重定向有时又称为服务器外跳转。
整个过程中,浏览器共提交了两次请求,服务器共发送了两次响应。只不过,第一次响应与第二次请求,对于用户来说是透明的,是感知不到的。用户认为,自己只提交了一次请 求,且只收到了一次响应。
转发和重定向的区别
请求转发
浏览器只发出一次请求,收到一次响应
请求所转发到的servlet2中可以直接获取到请求中所携带的数据
浏览器地址栏显示的为用户所提交的请求路径
只能跳转到当前应用的资源中
重定向
浏览器发出两次请求,接收到两次响应
重定向到的servlet2不能直接获取到用户提交请求中所携带的数据
浏览器地址栏显示的为重定向的请求路径,而非用户提交请求的路径。也正因为如此,重定向的一个很重要作用是:防止表单重复提交
重定向不仅可以跳转到当前应用的其它资源,也可以跳转到到其它应用中资源
转发和重定向的区别
若需要跳转到其它应用,则使用重定向。
若是处理表单数据的Servlet1要跳转到另外的Servlet2上,则需要选择重定向。为了防止表单重复提交。
若对某一请求进行处理的 Servlet 的执行需要消耗大量的服务器资源(CPU、内存),此时这个 Servlet 执行完毕后,也需要重定向。
其它情况,一般使用请求转发。