上一篇博客简单的介绍了一下有关Servlet的知识,从宏观上能够了解Servlet是干嘛的,这篇就来谈一下在Servlet中经常用到的两个概念请求转发与包含。
1.什么是请求转发与包含
在上一篇博客中我们大致了解了,Servlet是服务端的程序,用来接收客户端发过来的请求信息并处理信息。那么请求转发和包含就是表示由多个Servlet共同处理一个请求。比如说,客户端A向你挑战打架,如果你感觉自己不行的话,就可以转发给B,让B替你处理;或者你和B同志共同应对A的挑战,这就是包含。具体的流程图如下。
分析:根据上图可以得知,请求转发和请求包含都是处理的一次请求,所以服务器只会创建一个request对象和一个response对象,正如上面举得例子一样,都是处理的一次挑战的请求。因此图中的AServlet和BServlet中的request和response都是同一个域对象。既然两者共同拥有一份域对象,因此我们就可以把AServlet中的数据存放到域对象中,然后传到BServlet中再次获取。这就是request域的域范围,在一个请求链中。
2.请求转发实现
请求转发就是Servlet将请求转送给其他的Servlet或服务器资源,具体的实现如下
request.getRequestDispatcher("转发路径").forward(request,response)
1.getRequestDispatcher(String path):返回值类型是RequestDispatcher
2.forward(ServletRequest req,ServletResponse res):该方法时RequestDispatcher接口的方法,将请求从一个servlet转发到服务器上另一个资源。
3.请求包含实现
请求包含就是指多个Servlet共同处理一个请求。
request.getRequestDispatcher("转发路径").forward(request,response)
Include(ServletRequest request,ServletResponse response):表示包含
4.区别
(1)相同点
都是多个Servlet之间共同处理一个请求,并且在请求之间公用一个request对象和response对象
(2)不同点
如果是请求的话,那么前者将不能向客户端发出响应,这一工作就由后者来完成。
请求包含大多应用在jsp页面中,完成多页面的合并。
好了,上面讲解了太多的理论知识,估计能够从宏观上了解请求转发和包含到底是怎么回事了,下面就从代码实现上来深入的看一下。