请求转发解决方案
1. 工作原理
工作原理:用户第一次通过手动方式要求浏览器访问 OneServlet,OneServlet工作完毕后,通过当前的“请求对象”代替浏览器向 Tomcat 发送请求,申请调用 TwoServlet,Tomcat 在接收到这个请求之后,自动调用 TwoServlet 来完成剩余的任务。
2. 实现命令
OneServlet 类
package org.example;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class OneServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("OneServlet 实施麻醉 ......");
// 1. 通过当前“请求对象”生成资源文件申请报告对象
RequestDispatcher report = req.getRequestDispatcher("/two");
// 2. 将报告对象发送给 Tomcat
report.forward(req, resp);
}
}
TwoServlet 类
package org.example;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TwoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
System.out.println("TwoServlet 实施包皮手术 ......");
}
}
3. 优点
- 无论本次请求涉及到多少个 Servlet,用户只需要手动通过浏览器发送一次请求。
- Servlet 之间调用发生在服务端计算机上,节省了服务端与浏览器之间往返的次数,增加了处理服务的速度。
4. 特征
-
请求次数
在请求转发的过程中,浏览器只发送一次请求。
-
请求地址
只能向 Tomcat 服务器申请调用当前网站下的资源文件地址。
req.getRequestDispatcher("/资源文件名") // 不要写网站名
-
请求方式
在请求转发过程中,浏览器只发送了一个 HTTP 请求协议包,参加本次请求的所有 Servlet 共享同一个请求协议包,因此,这些 Servlet 接收的请求方式与浏览器发送的请求方式保持一致。