您的位置:首页 > 理论基础 > 计算机网络

RequestDispatcher提供两个方法:forward,include有什么区别,以及和HttpResponse的sendRedirect方法的区别

2014-09-18 10:26 1221 查看

RequestDispatcher定义一个对象,从客户端接收请求,然后将它发给服务器的可用资源(例如Servlet、CGI、HTML文件、JSP文件)。Servlet引擎创建request
dispatcher对象,用于封装由一个特定的URL定义的服务器资源。

RequestDispatcher包含了两个方法,forward和include方法。

1.forward

//转发

RequestDispatcher rd = request.getRequestDispatcher("服务器的可用资源(例如Servlet、CGI、HTML文件、JSP文件)");

rd.forward(request, response);

(1)
被用来从这个Servlet向其它服务器资源传递请求。当一个Servlet对响应作了初步的处理,并要求其它的对象对此作出响应时,可以使用这个方法。也就说把响应的控制权交给了其他对象了,由其它对象进行响应,forward ()方法执行完后,它下面的代码将不再执行。

(2)在forward方法调用之前,如果Servlet程序中写入的部分内容已被传送到客户端,forward方法将抛出异常IllegalStateException,forward方法执行以后,写入到缓冲区的内容将被清空,后面的写入操作将被忽略。也就是说调用这些方法之前,不能调用response向客户端传送数据。

2.include

RequestDispatcher rd = request.getRequestDispatcher("服务器的可用资源(例如Servlet、CGI、HTML文件、JSP文件)");

rd.include(request, response);

(1)被用来从这个Servlet向其它服务器资源传递请求,响应的控制权还是属于自己,其他对象继续做出处理,然后把处理处理的响应返回自己来做出响应。用来包括发送给其他服务器资源的响应的内容。例如;RequestDispatcher对象的Include方法可以将多个单功能的文件例如.jsp文件整合成一个Servlet文件。

(2)include()方法执行玩后,下面的代码继续执行。

注意:如果 include ()方法调用的那个 Servlet 中调用了 out.close() 关闭输出流对象;因为一旦关闭,响应将被提交,哪么 include() 方法下面的代码也将不再执行。



forword和include转发的特点

a. 转发的目的地只能是同一个应用内部的某个组件

b. 转发之后,浏览器地址栏的地址没有变化

c. 转发所涉及的各个组件可以共享同一个 request,response 对象

3.HttpServletResponse.sendRedirect

(1)sendRedirect方法实现请求重定向,RequestDispatcher.forward方法实现请求转发forward()仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出重定向后的地址;sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。

(2)forward()更加高效,在其可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。

(3)在有些情况下,需要跳转到一个其它服务器上的资源,则用sendRedirect()方法。sendRedirect()方法可以重定向到:当前应用程序中的其他资源,同一站点的其他应用程序中的资源,甚至其他站点的资源。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐