Servlet对象由Servlet容器创建,并且Servlet对象的service()方法也由容器调用,一个Servlet对象可否直接调用另一个Servlet对象的service()方法呢?答案是否定的,因为一个Servlet对象无法获得另一个Servlet对象的引用。

Web应用在响应客户端的一个请求时,有可能响应过程很复杂,需要多个Web项目组件共同协作,才能生成响应结果。尽管一个Servlet对象无法直接调用另一个Servlet对象的service()方法,但Servlet规范为Web组件之间的协作提供了两种途径。

●  请求转发:Servlet(源组件)先对客户请求做一些预处理,然后把请求转发给其他Web组件(目标组件)来完成包含生成响应结果在内的后续操作。

●  包含:Servlet(源组件)把其他Web组件(目标组件)生成的响应结果包含到自身的响应结果中。

请求转发与包含具有以下共同特点:

源组件和目标组件处理的都是同一个客户请求,源组件和目标组件共享一个ServletRequest对象和ServletResponse对象。

目标组件都可以为Servlet、JSP或HTML文档。

都依赖javax.servlet.RequestDispatcher接口。

javax.servlet.RequsetDispatcher接口表示请求分发器,它有两个方法。

●  forward()方法:把请求转发给目标组件,该方法的声明如下:

public void forward(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException

●  include()方法:包含目标组件的响应结果,该方法的声明如下:

public void include(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException

当Servlet源组件调用RequestDispatcher和forward()或include()方法时,都要把当前的ServletRequest对象和ServletResponse对象作为参数传给forward()或include()方法。这使得源组件和目标组件共享同一个ServletRequest对象和ServletResponse对象。

Servlet可通过两种方式得到RequestDispatcher对象:

●  调用ServletContext的getRequestDispatcher(String path)方法,path参数指定目标组件的路径。

●  调用HttpServletRequest的getRequestDispathcer(String path)方法,path参数指定目标组件的路径。

以上两种方式的区别在于,前者的path参数必须为绝对路径,而后者的path参数既可以为绝对路径,也可以为相对路径。所谓绝对路径就是以"/"开头的路径,"/"表示当前Web应用的URL入口,所谓相对路径,就是指相对于当前源组件的路径,不以符号"/"开头。

IT兄弟连 JavaWeb教程 Servlet转发的更多相关文章

  1. IT兄弟连 JavaWeb教程 Servlet API

    Java Servlet是运行在带有支持Java Servlet规范的解释器的web服务器上的Java类. Servlet可以使用javax.servlet和javax.servlet.http包创建 ...

  2. IT兄弟连 JavaWeb教程 请求转发案例

    CheckServlet类与OutputServlet类之间为请求转发关系.在web.xml文件中,为CheckServlet映射的URL为"/check",为OutputServ ...

  3. IT兄弟连 JavaWeb教程 Servlet表单数据

    很多情况下,需要传递一些信息,从浏览器到Web服务器,最终到后台程序.浏览器使用两种方法可将这些信息传递到Web服务器,分别为GET方法和POST方法. 1.GET方法 GET 方法向页面请求发送已编 ...

  4. IT兄弟连 JavaWeb教程 Servlet会话跟踪 经典面试题

    1.描述Cookie的作用 Cookie是网站保存在浏览器客户端的信息,也就是说保存在访客的机器里的变量,一般随着HTTP头发送到客户端.在Cookie生效之后及失效之前,客户每次发出页面请求的时候, ...

  5. IT兄弟连 JavaWeb教程 Servlet会话跟踪 经典案例

    案例需求:编写一个servlet,可以向session中存放一个消息,再编写一个servlet可以从session取得session中存放的这个消息. 案例实现: package com.xdl.se ...

  6. IT兄弟连 JavaWeb教程 Servlet会话跟踪 Session常用方法

    ●  public Object getAttribute(String name) 该方法返回在该session会话中具有指定名称的对象,如果没有指定名称的对象,则返回null. ●  public ...

  7. IT兄弟连 JavaWeb教程 Servlet会话跟踪 Session技术

    Servlet提供了HttpSession接口,该接口提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式. Servlet容器使用这个接口来创建一个HTTP客户端和HTTP服务器之 ...

  8. IT兄弟连 JavaWeb教程 Servlet会话跟踪 Cookie常用方法

    以下是在Servlet中操作Cookie时可使用的有用的方法列表 ●  public void setDomain(String pattern) 该方法设置cookie适用的域,例如 itxdl.c ...

  9. IT兄弟连 JavaWeb教程 Servlet会话跟踪 Cookie路径问题

    操作Cookie时,需要注意路径问题: 设置操作:任何路径都可以设置Cookie,但是有时我们也是用设置进行替换Cookie和删除Cookie(maxAge=0)! 替换:只能由完全相同的路径来操作! ...

随机推荐

  1. Hadoop+HBase+ZooKeeper分布式集群环境搭建

    一.环境说明 集群环境至少需要3个节点(也就是3台服务器设备):1个Master,2个Slave,节点之间局域网连接,可以相互ping通,下面举例说明,配置节点IP分配如下: Hostname IP ...

  2. CPU维修技术

    中央处理单元(Central Process Unit)简称CPU,是电脑的核心部件,负责处理和运算电脑内部所有数据.因其在电脑中的地位相当重要,所以一旦发生故障就会造成很严重的后果. [技术66]开 ...

  3. android经常使用正则工具类

    此类提供日常开发中经常使用的正则验证函数.比方:邮箱.手机号.电话号码.身份证号码.日期.数字.小数.URL.IP地址等.使用Pattern对象的matches方法进行整个字符匹配,调用该方法相当于: ...

  4. java:[1,0] illegal character: \65279 问题

    部署项目的时候报下面错误 [java] view plaincopyprint? java:[1,0] illegal character: \65279 java:[1,10] class, int ...

  5. Deep Learning for Robotics 资源汇总

    1 前言 在最新Nature的Machine Intelligence 中Lecun.Hinton和Bengio三位大牛的Review文章Deep Learning中.最后谈The Future Of ...

  6. C# Excel批注“哪种开发语言最好”

    Excel批注经常使用于为个别的单元格加入凝视.读者可以从凝视中获取额外的信息. 批注可隐藏,仅仅会在单元格右上方显示红色三角.加入后不会对单元格的内容喧宾夺主.在日常编程处理Excel中,为个别单元 ...

  7. NullpointerException真的一定要被预防?

    毫无疑问,空指针NullpointerException是我们最常遇到异常,没有之一! 在刚进入编程职业时,我想,大部分进入的同学肯定会受到前辈们的叮咛:一定要防止空指针,这是个低级错误.你们不是?好 ...

  8. 用 querySelectorAll 来查询 DOM 节点

    用 querySelectorAll 来查询 DOM 节点 Document.querySelectorAll - Web API 接口 | MDN https://developer.mozilla ...

  9. Getting Started with xUnit.net (desktop)

    https://xunit.github.io/docs/getting-started-desktop.html In this article, we will demonstrate getti ...

  10. JavaScript函数调用规则

    1. [代码][JavaScript]代码     JavaScript函数调用规则一 (1)全局函数调用:function makeArray( arg1, arg2 ){    return [t ...