5-多个Servlet调用规则和数据共享

某些来自浏览器的请求,往往需要服务端多个Servlet协同处理,但是浏览器一次只能访问一个Servlet,导致用户需要手动操作浏览器发起多次请求才能得到服务,这样增加了服务的难度,为了提供用户使用感受,所以要求无论本次请求涉及了多少Servlet,用户只需要手动通知浏览器发起一次请求即可。

多个Servlet之间的调用规则

有两种解决方案:

  • 重定向解决方案
  • 请求转发解决方案

重定向解决方案

工作原理:用户手动发送一次请求,第一个Servlet工作完成后,通过重定向方法将第二个Servlet地址写入到响应头location中,然后tomcat将302状态码写入到状态行,然后第二个Servlet继续工作,以此类推。

实现命令:response.sendRedirect(“地址”)

由于是通过地址栏通知浏览器发起下一次请求,因此请求方式一定是GET

缺点:进行多次往返,大量时间被消耗在往返上,增加用户等待时间:重定向解决方案需要在浏览器和服务器之间

请求转发解决方案

工作原理:用户第一次通过手动要求浏览器访问OneServlet,然后OneServlet工作完毕后,通过当前的请求对象代替浏览器向Tomcat发送请求,调用TwoServlet,然后Tomcat调用TwoServlet

实现命令:请求对象代替浏览器向Tomcat发送请求,

  1. 通过当前对象生成资源文件申请报告对象,RequestDispatcher report = request.getRequestDispatcher(“/资源文件名”);一定要以"/"开头

  2. 将报告对象发送给Tomcat

    report.forward(“当前请求对象”,“当前响应对象”);

    请求的方式由第一次浏览器发送请求的方式相同,即和浏览器的发送请求方式保持一致,因为所有Servlet共享一个请求协议包

    优点:无论需要调用多少Servlet,用户只需要手动发送一次请求

    ​ Servlet之间互相调用发生在服务端计算机,节省了服务端和浏览器之间的请求时间

    **注意:**Http服务器只能调用当前网站的资源文件

    特点:

    • 浏览器只发送一次请求

    总结

    简单来说,重定向方案就是浏览器发送一次请求,然后第一个Servlet执行完毕,通知浏览器去访问第二个Servlet,然后浏览器接着再次发送请求,以此类推;

    而请求转发方案就是浏览器发送一次请求,然后第一个Servlet执行完毕,不需要通知浏览器去访问下一个Servlet,而是直接去调用下一个Servlet。

    多个Servlet之间的数据共享实现方案

    所谓数据共享,就是第一个Servlet执行完后,将产生的数据交给下一个Servlet来处理

    Servlet规范一共提供了四种数据共享方案

    1. ServletContext接口
    2. Cookie类
    3. HttpSession接口
    4. HttpServletRequest接口

5-多个Servlet调用规则和数据共享
https://zhaoquaner.github.io/2022/05/11/JavaWeb/Servlet/6-多个Servlet调用规则和数据共享/
更新于
2022年5月22日
许可协议