sendRedirect()与forward()方法的异同

来源:互联网 发布:淘宝帐号管理消息订阅 编辑:程序博客网 时间:2024/04/28 20:51

相同点:

两者都是进行客户端请求重定向,可以利用另外的资源,如Servlet、JSP、HTML文件等来为客户端进行服务。

不同点:

1、 两者所在的接口不同

sendRedirect()方法来自HttpServletResponse接口,而forwartd()方法来自RequestDispatcher接口。

2、 工作原理不同

sendRedirect()的工作原理如下图所示:

其交互过程是:

浏览器首先访问Servlet1;

Servlet1想交接Servlet2去为客户端服务;

Servlet1调用sendRedirect()方法,通知浏览器,将浏览器重定向到Servlet2;

浏览器访问Servlet2;

Servlet2对客户端进行响应,此时与Servlet1没有关系。

forward()的工作原理如下图所示:

其交互过程是:

浏览器首先访问Servlet1;

Servlet1想交接Servlet2去为客户端服务;

Servlet1调用forward()方法,将请求转发给Servlet2;

Servlet2对请求做出响应。

3、 透明度不同

sendRedirect()方法对用户来说是透明的,浏览器会在响应中设置Location报头,自动完成重定向然后进行新的访问;而forward()方法对浏览器是透明的,浏览器并不知道为其服务的Servlet1已经换成了Servlet2,因为这是在服务器端改变的定向。

4、 发送请求次数不同

使用sendRedirect()方法,浏览器发送了两次请求;而使用forword()方法只发送了一次请求。

5、 响应的URL不同

使用sendRedirect()方法,Servlet1的URL会转到Servlet2的URL;而使用forward()方法,URL始终是指向原始URL。

6、 重定向范围不同

sendRedirect()方法不但可以在位于同一机子上的不同Web程序间进行重定向,还可以将客户端重定向到其他服务器上的Web应用程序。而forward()不能,只能在本机上本Web应用程序里重定向。

 

 

 

☞   温馨提示: 返回我的博客索引