请求转发-response留头不留体
来源:互联网 发布:sql注入在线检测 编辑:程序博客网 时间:2024/04/27 17:06
(1)请求转发定义:
Servlet(源组件)先对客户请求做一些预处理操作(一般是对响应头进行处理),然后把请求转发给其他Servlet(目标组件)来完成包括生成响应结果在内的后续操作。
实现方法:request.getRequestDispatcher(“接收请求的Servlet 路径”). forward(request,response)
getRequestDispatcher(String path):该方法的返回值类型是RequestDispatcher,请求发送器,该方法的参数是指明要接收请求的Servlet 的路径;
forward(ServletRequest req,ServletResponse res):该方法是RequestDispatcher 接口的方法,将请求从一个 servlet 转发到服务器上的另一个资源(servlet、JSP 文件或 HTML 文件)。此方法允许一个 servlet 对请求进行初步处理,并使另一个资源生成响应。需要传递两个参数,这两个参数是当前Servlet 的request 对象和 response 对象传递过去的。
forward() 方法的处理流程:
● 清空用于存放响应正文(响应体)数据的缓冲区。
● 如果目标组件为Servlet 或JSP,就调用它们的service() 方法,把该方法产生的响应结果发送到客户端,如果目标组件为文件系统中的静态 html 文档,就读去文档中的数据并把它发送到客户端。
● 由于 forward() 方法先清空用于存放响应正文数据的缓冲区,因此servlet源组件生成的响应结果不会被发送到客户端,只有目标组件生成的结果才会被发送到客户端,所以对源组件叫“留头不留体”,目标组件为“留体不留头”。
● 如果源组件在进行请求转发之前,已经提交了响应结果(例如调用了flush 或close() 方法),那么forward() 方法会抛出IllegalStateException。为了避免该异常,不应该在源组件中提交响应结果,所以叫留体抛异常。
(2)请求包含定义:
Servlet(源组件)把其他Servlet(目标组件)生成的响应结果包含到自身的响应结果中。
实现方式:request.getRequestDispatcher(“接收请求的Servlet 路径”). include(request,response)
include(ServletRequest request,ServletResponse response):该方法是RequestDispatcher 接口的方法,表示包含。它的参数同forward() 方法的参数一样都是由当前Servlet传递过去的。
包含与转发相比,源组件与被包含的目标组件的输出数据都会被添加到响应结果中,在目标组件中对响应状态代码或者响应头所做的修改都会被忽略,所以对源组件来说是“留头又留体”,对目标组件为“留体不留头”。
注意:当Servlet 源组件调用 RequestDispatcher 的 forward 或 include 方法时,都要把当前的 ServletRequest 对象和ServletResponse 对象作为参数传给 forward 或 include 方法,这就使得源组件和目标组件共享同一个ServletRequest 对象和ServletResponse 对象,就实现了多个Servlet 协同处理同一个请求。
附:RequestDispatcher 接口
RequestDispatcher 接口中定义了两个方法::forward() 方法和 include() 方法,它们分别用于将请求转发到 RequestDispatcher 对象封装的资源和将 RequestDispatcher 对象封装的资源作为当前响应内容的一部分包含进来.
- 请求转发-response留头不留体
- 请求转发(request)和重定向(response)
- request的请求转发和response请求重定向
- 请求重定向response.sendRedirect()和请求转发request.getRequestDispather().forward(request,response)区别
- javaee中request与response分不清以及请求转发
- JSP内置对象:request对象,response对象、请求重定向、请求转发
- Servlet开发(四)Response对象、Request对象的请求重定向、请求转发
- 请求转发
- 请求转发
- 请求转发
- 请求转发
- 请求转发
- 请求转发
- 请求转发
- response转发问题
- 内部跳转(请求转发)request.getRequsetDispatcher()和外部跳转(重定向)response.sendRedirect()的区别
- javaEE:day9-request和response的转发、重定向、请求包含小细节
- request和response的转发、重定向、请求包含小细节
- Eclipse中某一项目ctrl+左键无效
- 使用VS Code断点调试PHP
- 怎么给视图的字段一个默认值
- 线程的学习
- 免登录安装SourceTree
- 请求转发-response留头不留体
- Java多线程工具包java.util.concurrent---Atomic
- 计算机视觉中,有哪些比较好的目标跟踪算法?
- CCF最大波动
- java --数组内存分配等问题
- 推荐一个很不错的android开源播放器XLPlayer
- bzoj 1123: [POI2008]BLO
- Nodejs遇到 bower ESUDO Cannot be run with sudo 的解决办法
- 致程序员的一封信:去你的“油腻中年”!