Servlet之請求轉發和響應重定向

多個servlet之間的跳轉有兩種方式:

  • 請求轉發:request.getRequestDispatcher(“轉發路徑”).forward(request, response);

  • 響應重定向:response.sendRedirect("轉發路徑 ");

請求轉發:

@WebServlet("/direct/login") // @WebServlet註解相當於web.xml文件
public class CheckLoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        if(1 == 1){
        	// 請求轉發
        	request.getRequestDispatcher("/direct/index").forward(request,response);
        }
    }
}
@WebServlet("/direct/index") // @WebServlet註解相當於web.xml文件
public class IndexServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().println("<h1>This is index page</h1>");
    }
}

cd4356

請求轉發原理:

  1. 請求轉發是服務器跳轉,瀏覽器只產生一次請求

  2. 請求轉發語句:request.getRequestDispatcher().forward()

cd4356
請求轉發執行流程:瀏覽器發送一個請求到tomcat服務器,tomcat中CheckLoginServlet對請求進行處理,當CheckLoginServlet中調用了request.getRequestDispatcher().forward()方法後,就會將該請求(HttpServletRequest對象)原封不動的發送給IndexServlet,當indexServlet處理完該請求後產生的響應,將響應的結果返回給瀏覽器。這裏我們可以看到瀏覽器地址欄的URL地址沒有發生變化,證明瀏覽器只產生了一次請求。



響應重定向轉發:

@WebServlet("/direct/login") // @WebServlet註解相當於web.xml文件
public class CheckLoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        if(1 == 1){
            // 響應重定向
            response.sendRedirect("/direct/index");
        }
    }
}
@WebServlet("/direct/index") // @WebServlet註解相當於web.xml文件
public class IndexServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().println("<h1>This is index page</h1>");
    }
}

cd4356

響應重定向原理:

  1. 響應重定向是瀏覽器端跳轉,會產生兩次請求

  2. 響應重定向語句:response.sendRedirect()

cd4356
響應重定向執行流程:瀏覽器發送一個請求到tomcat服務器,tomcat中CheckLoginServlet對請求進行處理,當CheckLoginServlet中調用了response.sendRedirect()方法後,會馬上返回一個響應給瀏覽器。然後瀏覽器會重寫發送一個請求給IndexServlet,(注意這個請求和瀏覽器發送的第一個請求沒有任何關聯),當indexServlet處理完該請求後產生的響應,將響應的結果返回給瀏覽器。這裏我們可以看到瀏覽器地址欄的URL地址發生了變化,證明瀏覽器產生了兩次請求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章