在Servlet中,利用RequestDispatcher对象,可以将请求转发给另外一个Servlet或JSP页面,甚至是HTML页面,来处理对请求的响应。

一,RequestDispatcher接口方法简介

1,RequestDispatcher对象由Servlet容器来创建,封装一个由路径所标识的服务器资源。

2,RequestDispatcher接口中定义了二种方法用于请求转发:

forward(ServletRequest,ServletResponse)方法:

将请求转发给服务器上另外一个Servlet,JSP页面,或者HTML文件      这个方法必须在响应被提交给客户端之前调用,否则抛出异常。

方法调用后在响应中的没有提交的内容被自动消除。

include(ServletRequest,ServletResponse)方法 :

用于在响应中包含其他资源(Servlet,JSP页面或HTML文件)的内容。

即请求转发后,原先的Servlet还可以继续输出响应信息,转发到的Servlet对请求做出的响应将并入原先Servlet的响应对象中。

3,forward方法和include方法的区别:

forward方法调用后在响应中的没有提交的内容被自动消除。   include方法使原先的Servlet和转发到的Servlet都可以输出响应信息。

二,得到RequestDispatcher对象

三种方法可以得到RequestDispatcher对象:

1,利用ServletRequest接口中的getRequestDispatcher(String  path)方法。

2,ServletContext接口中getNamedDispatcher(String  path)和getRequestDispatcher(String  path)方法。

ServletRequest接口和ServletContext接口中getRequestDispatcher方法区别:

1,参数的区别

参数虽然都是资源路径名,ServletContext接口的中参数路径,只能使用绝对路径,必须以“/”开始,是相对于当前Servlet上下文根,    ServletRequest接口中的参数路径不仅可以相对于当前Servlet上下文根,还可以相对与当前Servlet路径,它之所以可以使用相对路劲,是因为在getRequestDispatcher(url)方法中封装了ServletContext.getRealPath()以获得相应的项目根路径,再通过字符串相加,从而可以获得一个完整的路径。

2,跨WEB应用程序访问资源

通过ServletContext.getContext()方法获取另个WEB应用程序的上下文环境对象来调用getRequestDispatcher(String  path)方法,将请求转发到另个WEB应用程序的资源。但是需要在当前WEB应用程序配置中设置<context>元素,指定crossContext属性值为true。

三,ServletResqonse接口中的sendReadirect()方法和forward()方法的区别

二个方法都是用于请求转发的方法,转发给另外的资源为客户端服务。但二者有本质的区别

sendReadirect()方法原理:

1,客户端发送请求,Servlet1做出处理。

2,Servlet1调用sendReadirect()方法,将客户端的请求 重新定位 到Servlet2。

3,客户端浏览器访问Servlet2.

4,Servlet2对客户端浏览器做出响应。

forward()方法原理:

1,客户端发送请求,Servlet1做出处理。

2,Servlet1调用sendReadirect()方法,将请求转发给Servlet2来处理请求,为客户端服务。

3,Servlet2对客户端浏览器做出响应。

区别:

1,定位与转发

sendReadirect()方法是重新定位到另外一个资源来处理请求,前后页面不是一个request,URL会重新定位,让浏览器端重新访问另外一个资源。forward()方法是是请求转发,前后页面共享一个request,这个是在服务端运行的,对浏览器来说是透明的,URL不会变化,隐藏了处理对象的变化。

2,处理请求的资源的范围

sendReadirect()方法可以跨WEB应用程序和服务器重新定位资源来处理请求。forward()方法只能在应用程序内部转发。

3,传值

sendReadirect这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递,所以该方式只适用于无传值跳转。

forward使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttribute

本文转自:http://blog.csdn.net/qfs_v/article/details/2551762

http://blog.csdn.net/mr_li13/article/details/50373972

Servlet请求转发RequestDispatcher接口的更多相关文章

  1. Servlet请求转发 RequestDispatcher接口.RP

    在Servlet中,利用RequestDispatcher对象,可以将请求转发给另外一个Servlet或JSP页面,甚至是HTML页面,来处理对请求的响应. 一,RequestDispatcher接口 ...

  2. Servlet中的请求转发RequestDispatcher接口的forword与Include的区别

    RequestDispatcher接口中具有两个方法: forward() 与 include() 均 可完成请求 的转发.区别如下: forword(): 使用该方法,则当前 的 Servlet 中 ...

  3. servlet请求转发

    来源:http://www.2cto.com/kf/201610/554591.html 请求转发:Servlet(源组件)先对客户请求做一些预处理操作(数据处理),然后把请求转发给其他Web组件(目 ...

  4. Java EE javax.servlet中的RequestDispatcher接口

    RequestDispatcher接口 public interface RequestDispatcher 一.介绍 定义一个对象,从客户端接收请求并将其发送到服务器上的任何资源(例如servlet ...

  5. servlet请求转发、包含以及重定向

    请求转发: 方式一: ServletContext对象.getRequestDispatcher(目标资源的URI).forward(request,response); 目标资源的URI " ...

  6. servlet请求转发与重定向的差别------用生活实例来形象说明两者的差别

    1,请求重定向:client行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保留,地址栏的URL地址会改变. 2,请求转发:server行为,req ...

  7. servlet请求转发于重定向

    请求的转发与重定向是Servlet控制页面跳转的主要方法,在Web应用中使用非常广泛. 一. 请求的转发 Servlet接收到浏览器端请求后,进行一定的处理,先不进行响应,而是在服务器端内部" ...

  8. servlet中请求转发(forword)与重定向(sendredirect)的区别

    摘自:http://www.cnblogs.com/CodeGuy/archive/2012/02/13/2349970.html 通俗易懂 servlet请求转发与重定向的区别: request.s ...

  9. Servlet(10)—请求转发和请求重定向

    请求转发与请求重定向 ①区别: 本质区别:请求转发只发出一次请求,请求重定向则发出两次请求. 请求转发:地址栏是初次发出请求的地址在最终的Servlet中,request对象和中转的那个request ...

随机推荐

  1. pjsip视频通信开发(底层实现)之用户注册(1)

    一.PJSIP简介 对于pjsip的介绍可以看http://www.cnblogs.com/my_life/articles/2175462.html 文章,里面详细介绍了它的组成框架以及各部份的组成 ...

  2. PHP phpMyadmin数据库备份太大无法导入怎么

    1 如图所示,phpMyAdmin的数据库最大只能8M,大于这个体积就无法导入 2 你可以从以下网站下载这个软件Navicat for MySQL, http://www.pb86.net/soft/ ...

  3. Android媒体扫描详细解析之二(MediaScanner & MediaProvider)

    上篇blog说到了经过对文件夹进行扫描如果后缀符合系统设定的一些格式,那么就会进行文件内容扫描下面我们紧接着STEP 14中的 status_t StagefrightMediaScanner::pr ...

  4. EF增删改查的优化

    在EF的上一篇博客中已经对它的增删改查有了一个简单的了解.当中的改动过程是先要把要改动的内容查出来然后再进行改动.保存.它详细的过程是这种 首先当在运行查询语句的时候"EF数据上下文&quo ...

  5. 算法笔记_035:寻找最小的k个数(Java)

    目录 1 问题描述 2 解决方案 2.1 全部排序法 2.2 部分排序法 2.3 用堆代替数组法 2.4线性选择算法   1 问题描述 有n个整数,请找出其中最小的k个数,要求时间复杂度尽可能低. 2 ...

  6. QtGui.QSlider

    A QtGui.QSlider is a widget that has a simple handle. This handle can be pulled back and forth. This ...

  7. 解构赋值 和 symbol

    1.数组解构 let [a,b,c,d] = ['aa','bb',77,88] 嵌套数组解构 let [a,b,[c,d],e] = ['aa','bb',[33,44],55] 空缺变量 let ...

  8. 如何配置 Oracle VirtualBox 中的客户机与物理机网络

    当你在 Oracle VirtualBox 虚拟机软件 中安装了各种操作系统时,你可能需要实现物理机与虚拟机之间的相互访问. 在这篇文章中,我们将会以最简单明了的方式来说明如何配置客户机与 Linux ...

  9. HTML 事件属性(如:onsubmit)

    学习啥都需要一个基础 基础很重要: HTML 4 的新特性之一是可以使 HTML 事件触发浏览器中的行为,比方说当用户点击某个 HTML 元素时启动一段 JavaScript. 在现代浏览器中都内置有 ...

  10. 用Drupal快速实现mobile平台服务端【转】

    原文地址:http://www.terrysco.com/node/drupal-as-mobile-backend.html 用Drupal很容易实现一个API,让手机平台或者其他系统使用json的 ...