Servlet请求转发与包含

1.Servlet规范为Web组件之间的协作提供了两种途径

2.web组件包含哪些,目标组件都可以为Servlet,jsp或者HTML文档.

3.源组件和目标组件共享一个ServletRequest对象和ServletResponse对象

http://hi.baidu.com/java_thinker/item/bf580a59856987c4d2e10c34


一个Servlet对象无法获得另一个Servlet对象的引用


Web应用在响应客户端的一个请求时,有可能相应过程很复杂,需要多个Web组件共同协作,才能生成响应结果,经管一个Servlet对象无法直接调用另一个Servlet对象的service方法,但Servlet规范为Web组件之间的协作提供了两种途径.
1.请求转发:Servlet(源组件)先对客户端请求做一些预处理的操作,然后把请求转发给其他Web组件(目标组件)来完成包括生成响应结果在内的后续操作.
2.包含:Servlet(源组件)把其他Web组件(目标组件)生成的响应结果包含到自身的响应结果中.


请求转发和包含有以下共同点:


1.源组件和目标组件处理的都是同一个客户请求,源组件和目标组件共享一个ServletRequest对象和ServletResponse对象.
2.目标组件都可以为Servlet,jsp或者HTML文档.
3.都依赖Servlet.servlet.RequestDispatcher接口
4.forward()方法:将请求转发给目标组件
 public void forward(ServletRequest request,ServletResponse response)throws ServletException,java.io.IOException
5.include()方法:包含目标组件的响应结果
 public void include(ServletRequest request,ServletResponse response)throws ServletException,java.io.IOException

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


两种获得RequestDispatcher的对象方法:


1.调用ServletContext的getRequestDispatcher(String path)方法,path指定目标组件的路径,使用的是绝对路径,即以符号"/"开头的路径,"/"表示当前Web应用的URL入口;
2.调用ServletRequest的getRequestDispatcher(String path)方法,path指定目标组件的路径,使用的相对路径,即相对于当前的源Servlet组件的路径,不以符号"/"开头


包含与请求转发相比,前者有以下的特点:


1.源组件与被包含的目标组件的输出数据都会被添加到响应结果中;
2.在目标组件中对响应状态代码或者响应头所做的修改会被忽略.


请求范围:


 对于Web应用范围  是指整个Web应用的生命周期,Web应用范围与ServletContext对象的生命周期对应,Web应用范围内的共享数据作为ServletContext对象的属性而存在,在Web组件只要共享一个ServletContext对象,也就能共享Web应用范围内的共享数据.


 对于请求范围  是指服务器端响应一次客户请求的过程,从Servlet容器接收到一个客户请求开始,到返回响应结果结束.在具体实现上,请求范围与ServletRequst和ServletResponse对象的声明周期结束.Servlet容器每次接收到一个客户请求,都会先创建一个针对与该请求的ServletRequest和ServletResponse对象,然后把这两个对象作为参数传递给相应Servlet服务方法,当容器把本次响应结果返回给客户,ServletRequest对象和ServletResponse对象的生命周期就结束了.
 
 当源组件和目标组件之间为请求转发关系或者包含关系时,对于每一次客户请求,它们都共享同一个ServletRequest对象和ServletResponse对象,因此源组件和目标组件能共享请求范围内的共享数据.
 对于客户端的每一次请求,Servlet容器都会创建一个ServletResponse和ServletRequest对象.


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值