请求转发:服务器收到请求后,从一个资源跳转到另一个资源的操作叫请求转发。
举例:A员工想要加工资怎么处理?
Servlet01(A员工的老板) 需要信息与业务流程:
- 用户的基本请求参数(A员工想要加工资的文本)
- Servlet01 处理完后需要对信息添加专属标志(老板审核完之后对加工资文本盖一个章)
- Servlet01 提供Servlet02 的访问地址 (老板告诉A员工去财务部)
- 转发请求(员工走向财务部)
Servlet02 (财务部) 需要信息与业务流程:
- 获取请求的参数(查看加工资的文本)
- 检查 Servlet01 的标志(查看老板是否盖章)
- 处理业务(加工资)
演示 请求的转发
Servlet01(老板的业务处理)
public class Servlet01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 接收员工的工资请求书
String req = request.getParameter("req");
System.out.println("老板查看员工的请求书:" + req);
// 2. 给请求书盖章,并传递给财务部
request.setAttribute("key", "老板的同意");
// 3. 提供给员工财务部的地址
// 注意!请求转发的地址必须要以斜杠开头,斜杠表示:http://ip:prot/工程名/
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/servlet02/*");
// 4. 员工走向财务部
requestDispatcher.forward(request,response);
}
}
Servlet02(财务部)
public class Servlet02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 接收员工的工资请求书
String req = request.getParameter("req");
System.out.println("财务部查看员工的请求书:" + req);
// 2. 查看有没有老板的章
Object key = request.getAttribute("key");
System.out.println("查看是否有老板的章:" + key);
// 3. 处理自己的业务(加工资)
System.out.println("修改员工工资");
}
}
设置请求参数
输出