重定向和請求分派

(1)請求的重定向

            HttpServletResponset接口提供的sendRedirect()方法用於生成302響應碼和Location響應頭,從而通知客戶端去重新訪問Location響應頭中指定的URL,其完整的定義語法如下:

public void sendRedirect(String location) throws IOException;

                   其中的location參數指定了重定向的URL,它可以使用絕對URL和相對URL,Servlet容器會自動將相對URL轉換成絕對URL後,再生成location頭字段。

重定向的例子 response.sendRedirect(“secuse“);

         注:重定向是兩個servlet類結合而使用的,即是兩次向服務器提交請求。一個servlet類不能完成操作,當用戶運行到sendRedirect()時,會生成302響應碼,意思是再次提交請求,在localtion的url的帶領下,去訪問secuess的servlet類,從而完成實現,但是在secuess中不能再次提交request的請求,否則返回的是null。因爲每一次請求都是獨一的。

(2)請求的分派

1.Servlet API中定義了一個RequestDispatcher接口,俗稱請求分派器。它定義瞭如下兩個方法:

(1)public void forward(ServletRequest request, ServletResponse response)   throws ServletException,IOException;

(2)public void include(ServletRequest request, ServletResponse response)   throws ServletException,IOException

         2.請求的轉發:

              調用ServletContext接口提供的getRequestDispatcher(String url)方法。

調用ServletRequest接口提供的getRequestDispatcher(String url)方法

         3.例子:

              RequestDispatcher rd = request.getRequestDispatcher("fail");

           //請求的轉發,向前 ------------   一個請求對象

           rd.forward(request, response);

           //請求的轉發

           rd.include(request, response);

                forwrod和include的區別:forword是在頁面跳轉之後直接輸出,不會再返回,而include則是把我當前的目錄包含,輸出

(3)兩者比較:

       1.請求轉發只能是同一個web站點

          重定向不僅可以定向到當前的web程序,還可以訪問其他的站點的資源

2.    重定向在完成操作後,地址欄會發生變化,由初始的URL地址變成重定向的目標URL

請求轉發過程結束後,瀏覽器地址欄保持初始的URL地址不變。

3.請求分派的發起者和被調用者之間共享相同的request實例和response實例,它們屬於同一個“請求/響應”過程;而重定向的發起者和被調用者使用各自的request實例和response實例,它們各自屬於獨立的“請求/響應”過程

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