多个Servlet之间调用的规则
一、 重定向解决方案
1. 工作原理
- 用户第一次手动向一号Servlet发起请求,一号Servlet工作完成后,将二号Servlet的地址写入到响应头的loaction属性中,使得tomcat将302状态码写入状态行。
- 在浏览器接收到响应包后,会读取到302状态码,此时浏览器会自动根据响应头里的location属性,向请求地址发起第二次请求,访问二号Servlet完成任务。
2. 实现代码
response.sendRedirect("请求地址");
//请求地址会被写入到响应包中的响应头的loaction属性里。
3. 方案特征
(1)请求地址:
既可以把当前网站内部的资源文件发送给浏览器,也可以把其他网站的资源文件发给浏览器。
(2)请求次数:
浏览器至少要发送两次请求,但是只有第一次请求是用户发送的,后续的请求都是浏览器自动发送的。
(3)请求方式:
重定向解决方案中,通过地址栏通知浏览器发起下一次请求,因此通过重定向解决方案调用的资源文件使用的请求方式一定是GET。
4. 方案缺点
- 重定向解决方案需要在浏览器和服务器之间进行多次往返,大量时间消耗在往返的过程上,增加用户的等待服务时间。
二、 请求转发解决方案
1. 工作原理
- 用户第一次通过手动方式要求浏览器访问一号Servlet,一号Servlet工作完毕后,通过当前请求对象代替浏览器,向tomcat发送请求,调用二号Servlet。tomcat收到后,自动调用二号Servlet来完成剩下的任务。
2. 实现代码
//通过当前全球对象生成资源文件申请报告对象
RequestDispatcher report = request.getRequestDispatcher("/资源文件名");
//将报告对象交给tomcat
report.forward(当前请求对象,当前响应对象);
3. 方案特征
(1)请求次数:
在请求转发的过程中,浏览器只发送一次请求。
(2)请求地址:
只能向tomcat服务器申请调用当前网站下资源文件的地址。
(3)请求方式:
在请求转发过程中,浏览器只发送一个http请求协议包,参与本次请求的所有servlet共享同一个请求协议包,所以这些Servlet接受的请求方式与浏览器发送的请求方式是相同的。
4. 方案优点
(1)无论请求涉及到多少个Servlet,用户只需要手动通过浏览器发送一次请求。
(2)Servlet之间调用发生在服务器端上,节省服务器端与浏览器之间往返的次数,增加处理速度。