RequestDispatcher提供两个方法:forward,include有什么区别,以及和HttpResponse的sendRedirect方法的区别
来源:互联网 发布:win7系统盘瘦身软件 编辑:程序博客网 时间:2024/05/23 23:39
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()方法可以重定向到:当前应用程序中的其他资源,同一站点的其他应用程序中的资源,甚至其他站点的资源。
- RequestDispatcher提供两个方法:forward,include有什么区别,以及和HttpResponse的sendRedirect方法的区别
- RequestDispatcher提供两个方法:forward,include有什么区别
- RequestDispatcher提供两个方法:forward,include有什么区别
- RequestDispatcher.forward() 方法和HttpServletResponse.sendRedirect()方法的区别
- sendRedirect()和forward()方法有什么区别?
- RequestDispatcher.forward() 和sendRedirect( "")的区别
- RequestDispatcher接口的include()方法与forward()方法的区别
- 四、sendRedirect()和forward()方法的区别 -----HttpServletResponse接口的sendRedirect()方法和RequestDispatcher接口的forw
- HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法区别
- RequestDispatcher的forward与include方法的区别
- Response.sendRedirect()与RequestDispatcher.forward()方法区别
- sendRedirect()和forward()方法的区别
- sendRedirect()和forward()方法的区别
- sendRedirect()和forward()方法的区别
- requestDispatcher.forward()与response.sendRedirect()的区别
- RequestDispatcher.forward() 与 HttpServletResponse.sendRedirect()的区别
- HttpServletResponse.sendRedirect()与RequestDispatcher.forward()的区别
- HttpServletResponse.sendRedirect()与RequestDispatcher.forward()的区别
- HTTP Method小结(GET,POST.etc)
- Android: 如何调试init.rc中的service
- leetcode Single Number
- 黑马程序员--视频随笔记录--多线程1
- strcmp函数和strcpy函数
- RequestDispatcher提供两个方法:forward,include有什么区别,以及和HttpResponse的sendRedirect方法的区别
- c#文件读写、创建、复制、移动、删除
- tomcat的work目录
- hive-学习内容
- redis 超全的操作
- Pre-emptive threads and Lua
- rgb to yuv 互相转化
- Ubuntu 14.04 NDK R9 编译ffmpeg2.4
- C#——函数