請求的重新導向和請求指派
重新導向
– HttpServletRequest介面提供的sendRedirect()方法用於產生302響應碼和Location回應標頭,從而通知用戶端去重新訪問Location回應標頭中指定的URL,其完整的定義文法如下:
• public void sendRedirect(String location) throws IOException;
– 其中的location參數指定了重新導向的URL,它可以使用絕對URL和相對URL,Servlet容器會自動將相對URL轉換成絕對URL後,再產生location頭欄位。
請求指派
– Servlet API中定義了一個RequestDispatcher介面,俗稱請求指派器。它定義了如下兩個方法:
• public void forward(ServletRequest request, ServletResponse response)
• throws ServletException,IOException;
• public void include(ServletRequest request, ServletResponse response)
• throws ServletException,IOException;
– 擷取RequestDispatcher執行個體的方式主要有兩種:
• 調用ServletContext介面提供的getRequestDispatcher(String url)方法。
• 調用ServletRequest介面提供的getRequestDispatcher(String url)方法。
重新導向和請求指派的比較
HttpServletResponse的sendRedirect()方法實現的重新導向和RequestDispatcher的forward()方法實現的請求轉寄的比較:
1、請求指派只能將請求轉寄給同一個Web應用中的其他組件;而重新導向不僅可以定向到當前應用程式中的其他資源,也可以重新導向到其他網站的資源上。
2、重新導向的訪問過程結束後,瀏覽器地址欄中顯示的URL會發生改變,由初始的URL地址變成重新導向的目標URL;而請求轉寄過程結束後,瀏覽器地址欄保持初始的URL地址不變。
3、請求指派的發起者和被調用者之間共用相同的request執行個體和response執行個體,它們屬於同一個“請求/響應”過程;而重新導向的發起者和被調用者使用各自的request執行個體和response執行個體,它們各自屬於獨立的“請求/響應”過程。
利用請求域屬性傳遞對象資料
HttpServletRequest介面中提供了幾個方法用來操作請求執行個體中儲存的對象:
(1)public void setAttribute(String name, Object obj):將Object Storage Service進HttpServletRequest執行個體中。
(2)public Object getAttribute(String name):檢索儲存在HttpServletRequest執行個體中的對象。
(3)public Enumeration getAttributeNames():返回包含HttpServletRequest執行個體中的所有屬性名稱的Enumeration對象
(4)public void removeAttribute(String name):從HttpServletRequest執行個體中刪除指定名稱的屬性。