JAVAWEB學習(5) — 轉發和重定向
阿新 • • 發佈:2018-11-24
轉發和重定向
1. 轉發
1.1 什麼是轉發
一個web元件將未完成的處理通過容器交給另外一個web元件繼續做
web元件指的是servlet或者是jsp
通常是一個servlet獲得資料之後轉發給一個jsp來展現
1.2 如何轉發
-
繫結資料到請求物件上
//name:繫結名 //obj:繫結值 request.setAttribute(String name,Object obj); String request.getAttribute(String name);
-
獲得轉發器
//url是轉發地址,通常是一個jsp RequestDispatcher rd =
-
轉發
rd.forward(request,response);
1.3 轉發的特點
- 轉發的地址是有限制的,要求屬於同一個web應用。
- 轉發之後,瀏覽器位址列的地址不變
2. 重定向
2.1 什麼是重定向
伺服器通知瀏覽器向某個地址傳送請求。
伺服器可以通過傳送302狀態碼及Location訊息頭(該訊息頭的值是一個地址,一般稱之為重定向地址)給瀏覽器,瀏覽器收到之後,會立即向重定向地址傳送請求
2.2 如何重定向
//url用來指定重定向地址
response.sendRedirect(String url);
2.3 重定向的一個細節
重定向之前,容器會先清空response物件上存放的所有資料
實體內容為空
3. 轉發和重定向的區別
兩種跳轉獲得物件的方式
//獲得轉發物件getRequestDispatcher()
HttpServletRequest(httpServletRequest).getRequestDispatcher
ServletContext.getRequestDispatcher();
//獲得重定向物件sendRedirect()
HttpServletResponse( httpServletResponse).sendRedirect();
- 轉發使用的是getRequestDispatcher()方法;重定向使用的是sendRedirect()
- 轉發:瀏覽器URL的位址列不變。重定向:瀏覽器URL的位址列改變
- 轉發是伺服器行為,重定向是客戶端行為
- 轉發更高效。轉發是瀏覽器只做了一次訪問請求。重定向是瀏覽器做了至少兩次的訪問請求的
- 轉發2次跳轉之間傳輸的資訊不會丟失,重定向2次跳轉之間傳輸的資訊會丟失(request範圍)
- 請求轉發的path只能是當前專案中的path,而重定向location可以是專案外的地址
4. 轉發和重定向的選擇
- 重定向的速度比轉發慢,因為瀏覽器還得發出一個新的請求,所以如果在使用轉發和重定向都無所謂的時候建議使用轉發
- 因為轉發只能訪問當前WEB的應用程式,所以不同WEB應用程式之間的訪問,特別是要訪問到另外一個WEB站點上的資源的情況,這個時候就只能使用重定向了