1. 程式人生 > 實用技巧 >Servelet------12 response,重定向

Servelet------12 response,重定向

概述:

與請求轉發類似的是重定向也是當客戶端瀏覽器請求的功能被請求的資源類不能完成,會通過另一個資源類去完成。但是不同的是重定向是當訪問的資源類不能完成請求的業務邏輯時,資源類會告訴瀏覽器能夠完成這個業務的資源類的地址,然後瀏覽器再去訪問另一個資源類。

重定向的實現方式有兩種:

  1.

  • 設定狀態碼為302
  • 設定相應頭location的值為重定向的資源類的地址

  2.

使用:response.sendRedirect(String URI);

程式碼實現:

第一種方式:

資源類1

@WebServlet("/servlet01")
public class Servlet extends
HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("資源類1執行了...."); response.setStatus(302); //設定狀態碼 response.setHeader("location", "/hui/servlet02"); //設定重定向地址 } protected
void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }

資源類2

@WebServlet("/servlet02")
public class Servlet02 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException { System.out.println("資源類2執行了..."); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }

訪問:

位址列發生了變化:

執行結果:

第二種方式實現:

資源類1

@WebServlet("/servlet01")
public class Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("資源類1執行了....");
      response.sendRedirect("/servlet02");   //第二種方式
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

資源類2不變。

訪問:

位址列發生變化:

執行結果:

因為重定向並不是一次訪問,而是讓瀏覽器去訪問另外一個地址,那麼這個地址可不可以是別的伺服器中的呢?

我們可以將重定向地址改成百度首頁:

@WebServlet("/servlet01")
public class Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("資源類1執行了....");
      response.sendRedirect("http://www.baidu.com");   //第二種方式
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

訪問:

跳轉成功:

小結:

第二種重定向方式其實是第一種方式的簡化,其內部應用的還是第一種方式。

重定向和請求轉發對比:

  • 請求轉發是一次請求,重定向是多次請求
  • 請求轉發位址列不會發生變化,重定向位址列發生變化
  • 請求轉發只能訪問本伺服器內的資源,重定向可以訪問其他站點的資源