天天看點

關于Servlet中forward的執行流程

先寫三個Servlet

@WebServlet("/a")
public class AServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("A -> B start");
        req.getRequestDispatcher("/b").forward(req,resp);
        System.out.println("A -> B end");
    }
}
           
@WebServlet("/b")
public class BServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("B -> C start");
        req.getRequestDispatcher("/c").forward(req,resp);
        System.out.println("B -> C end");
    }
}
           
@WebServlet("/c")
public class CServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("C start");
        resp.getWriter().println("c");
        System.out.println("C end");
    }
}
           

A跳轉到B,B再跳轉到C,C生成響應

執行結果為

A -> B start

B -> C start

C start

C end

B -> C end

A -> B end

可以看到這個轉發和方法調用相似

轉發後面的代碼仍會執行