5-多个Servlet调用规则和数据共享
某些来自浏览器的请求,往往需要服务端多个Servlet协同处理,但是浏览器一次只能访问一个Servlet,导致用户需要手动操作浏览器发起多次请求才能得到服务,这样增加了服务的难度,为了提供用户使用感受,所以要求无论本次请求涉及了多少Servlet,用户只需要手动通知浏览器发起一次请求即可。
多个Servlet之间的调用规则
有两种解决方案:
- 重定向解决方案
- 请求转发解决方案
重定向解决方案
工作原理:用户手动发送一次请求,第一个Servlet工作完成后,通过重定向方法将第二个Servlet地址写入到响应头location中,然后tomcat将302状态码写入到状态行,然后第二个Servlet继续工作,以此类推。
实现命令:response.sendRedirect(“地址”)
由于是通过地址栏通知浏览器发起下一次请求,因此请求方式一定是GET
缺点:进行多次往返,大量时间被消耗在往返上,增加用户等待时间:重定向解决方案需要在浏览器和服务器之间
请求转发解决方案
工作原理:用户第一次通过手动要求浏览器访问OneServlet,然后OneServlet工作完毕后,通过当前的请求对象代替浏览器向Tomcat发送请求,调用TwoServlet,然后Tomcat调用TwoServlet
实现命令:请求对象代替浏览器向Tomcat发送请求,
通过当前对象生成资源文件申请报告对象,RequestDispatcher report = request.getRequestDispatcher(“/资源文件名”);一定要以"/"开头
将报告对象发送给Tomcat
report.forward(“当前请求对象”,“当前响应对象”);
请求的方式由第一次浏览器发送请求的方式相同,即和浏览器的发送请求方式保持一致,因为所有Servlet共享一个请求协议包
优点:无论需要调用多少Servlet,用户只需要手动发送一次请求
Servlet之间互相调用发生在服务端计算机,节省了服务端和浏览器之间的请求时间
**注意:**Http服务器只能调用当前网站的资源文件
特点:
- 浏览器只发送一次请求
总结
简单来说,重定向方案就是浏览器发送一次请求,然后第一个Servlet执行完毕,通知浏览器去访问第二个Servlet,然后浏览器接着再次发送请求,以此类推;
而请求转发方案就是浏览器发送一次请求,然后第一个Servlet执行完毕,不需要通知浏览器去访问下一个Servlet,而是直接去调用下一个Servlet。
多个Servlet之间的数据共享实现方案
所谓数据共享,就是第一个Servlet执行完后,将产生的数据交给下一个Servlet来处理
Servlet规范一共提供了四种数据共享方案
- ServletContext接口
- Cookie类
- HttpSession接口
- HttpServletRequest接口