IT兄弟连 JavaWeb教程 Servlet转发
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入口,所谓相对路径,就是指相对于当前源组件的路径,不以符号"/"开头。
最新文章
- PL/SQL快速选中一行并执行
- gulp编译sass
- JDBC学习笔记2
- JavaScript学习笔记及知识点整理_3
- 在 Ubuntu 上配置高性能的 HHVM 环境
- 华为OJ平台——杨辉三角的变形
- Python 文件的IO
- js判断是否为pc端或移动端
- SQL编程的一些良好好习惯
- 使用VideoView开发视频总结
- Shell中read的常用方式
- php nginx 负载均衡简单配置过程
- 使用tp访问数据库时提示错误: 'PDO' not found, 和not defined constant mysql_attr_init_command 和call an undefined function Think\Template\simpleXml_load_string()函数
- 从零开始学spring cloud(十) -------- hystrix简单代码示例
- 17秋 软件工程 第六次作业 Beta冲刺 Scrum4
- 轻量级Java持久化框架,Hibernate完美助手,Minidao 1.6.2版本发布
- 2017最新整理移动Web开发遇到的坑
- 【LOJ】#2071. 「JSOI2016」最佳团体
- 洛谷P4168 蒲公英 [Violet] 分块
- solr集群的搭建教程和使用入门
热门文章
- three.js 源代码凝视(十五)Math/Plane.js
- 【转载】5种网络IO模型
- getElementByID,getElementsByName,getElementsByTagName
- DesiredSize,RenderSize&;&; Width ,ActualWidth
- bash仅仅读的环境变量
- csu1116 Kingdoms 最小生成树-枚举状态
- Seesion和Cookie详解2
- ZOJ 3874 Permutation Graph 分治NTT
- Why there are no job running on hadoop
- 小程序 单页应用的 tab切换 实现