Servlet的應用—重新導向和請求分配

來源:互聯網
上載者:User

 

1.重新導向和請求指派

(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執行個體,它們各自屬於獨立的“請求/響應”過程

 

(4)利用請求域擷取屬性傳遞對象資料

       HttpServletRequest介面中提供了幾個方法用來操作請求執行個體中儲存的對象:

–        public void setAttribute(String name, Object obj):將Object Storage Service進HttpServletRequest執行個體中。

–        public Object getAttribute(String name):檢索儲存在HttpServletRequest執行個體中的對象。

–        public Enumeration getAttributeNames():返回包含HttpServletRequest執行個體中的所有屬性名稱的Enumeration對象

例子:

     設定:

                     request.setAttribute("var1", "var1");

      request.setAttribute("var2", "var3");

   讀取:

           //枚舉類型的擷取

           Enumeration enum1 = request.getAttributeNames();

           //擷取每一個名稱所對應的值

               while(enum1.hasMoreElements()){

                  //得到屬性的名稱

                  String s= (String) enum1.nextElement();

                   //得到屬性的值

                  String var = (String) request.getAttribute(s);

                  System.out.println(s+"::"+var);

          }

(5)       ServletConfig和servletContext

 

  系統在建立servlet執行個體之前,先讀取xml檔案,並封裝給ServletConfig對象,來進行初始化

             

       <!-- 在部署檔案xml中必須有兩個標籤,分別為《servlet》和《servlet-map》

  <servlet-mapping>

    <servlet-name>FirstServlet</servlet-name>

    <url-pattern>*.do</url-pattern>

  </servlet-mapping>

      *.do是可以把訪問的名字隨便寫

  -->

 

    servletConfig對象封裝了web.xml初始化的值

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.