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入口,所谓相对路径,就是指相对于当前源组件的路径,不以符号"/"开头。

最新文章

  1. PL/SQL快速选中一行并执行
  2. gulp编译sass
  3. JDBC学习笔记2
  4. JavaScript学习笔记及知识点整理_3
  5. 在 Ubuntu 上配置高性能的 HHVM 环境
  6. 华为OJ平台——杨辉三角的变形
  7. Python 文件的IO
  8. js判断是否为pc端或移动端
  9. SQL编程的一些良好好习惯
  10. 使用VideoView开发视频总结
  11. Shell中read的常用方式
  12. php nginx 负载均衡简单配置过程
  13. 使用tp访问数据库时提示错误: 'PDO' not found, 和not defined constant mysql_attr_init_command 和call an undefined function Think\Template\simpleXml_load_string()函数
  14. 从零开始学spring cloud(十) -------- hystrix简单代码示例
  15. 17秋 软件工程 第六次作业 Beta冲刺 Scrum4
  16. 轻量级Java持久化框架,Hibernate完美助手,Minidao 1.6.2版本发布
  17. 2017最新整理移动Web开发遇到的坑
  18. 【LOJ】#2071. 「JSOI2016」最佳团体
  19. 洛谷P4168 蒲公英 [Violet] 分块
  20. solr集群的搭建教程和使用入门

热门文章

  1. three.js 源代码凝视(十五)Math/Plane.js
  2. 【转载】5种网络IO模型
  3. getElementByID,getElementsByName,getElementsByTagName
  4. DesiredSize,RenderSize&& Width ,ActualWidth
  5. bash仅仅读的环境变量
  6. csu1116 Kingdoms 最小生成树-枚举状态
  7. Seesion和Cookie详解2
  8. ZOJ 3874 Permutation Graph 分治NTT
  9. Why there are no job running on hadoop
  10. 小程序 单页应用的 tab切换 实现