資源跳轉的方式
》兩種:請求轉發和重定向
》請求轉發
》發生的位置:發生在服務器端,瀏覽器的地址欄不會被改變
》轉發的本質:一個請求在多個資源之間跳轉
》轉發時數據的保存:
》request和response的生命周期是一次請求和響應的過程
》可以放在request對象中,請求轉發是一次請求和響應的過程,所以轉發時的數據能進行共享
》 request.setAttribute("name",name);
》request.getAttribute("name");
》使用session
//獲取session對象
HttpSession Session = request.getSession();
//利用session傳值
Session.setAttribute("msg","請重新輸入");
//在重定向到的文件中,通過key值獲取value值;
session.getAttribute("msg")
》可以轉向的資源
只能是當前服務器內部的資源
》核心代碼:
request.getRequestDispatcher("要轉發的資源路徑").forward(request,response);
RequestDispatcher是一個Web資源的包裝器,可以用來把當前request傳遞
到該資源。RequestDispatcher接口中定義參見如下代碼:
l public interface RequestDispatcher {
void forward(ServletRequest request, ServletResponse response);
}
l forward()方法將當前的request和response重定向到該RequestDispacher指
定的資源。這在實際項目中大量使用,因為完成一個業務操作往往需要跨越多
個步驟,每一步驟完成相應的處理后,轉向到下一個步驟。比如,通常業務處
理在Servlet中處理,處理的結果轉向到一個JSP頁面或者下一個Servlet繼續處
理。
》重定向
》發生的位置:發生在瀏覽器端
》服務器通知瀏覽器發送一個新的請求,地址欄的url改變
》重定向時數據的保存
》重定向時發生了二次請求,第一次中的數據,在重定向后都沒了
》使用session
//獲取session對象
HttpSession Session = request.getSession();
//利用session傳值
Session.setAttribute("msg","請重新輸入");
//在重定向到的文件中,通過key值獲取value值;
session.getAttribute("msg")
》重定向可以轉向的資源
不但可以轉向內部資源,也可以轉向外部資源
》核心代碼:
response.sendRedirect("要重定向的資源路徑");
》注意:轉發和重定向不能和PrintWriter一起使用
forward:方法只能在同一個Web應用程序內的資源之間轉發請求 。
l redirect不僅可以重定向到當前應用程序的其他資源,還可以重定向到同一
個站點上的其他應用程序中的資源,甚至是使用絕對URL重定向到其他站點
的資源.
l forward:執行效率高.
l redirect:執行效率低.
public void sendRedirect( java.lang.String location) throws
java.io.IOException 。這個方法將響應定向到參數location指定的、新的
URL。
l location可以是一個絕對的URL。如:
response.sendRedirect(“http://java.sun.com”)。
l 也可以使用相對的URL。如果location以“/”開頭,則容器認為相對於當
前Web應用的根,否則,容器將解析為相對於當前請求的URL