Web組件之間的跳轉(zhuǎn)方式:
- 請求轉(zhuǎn)發(fā)(forward)
- URL重定向(redirect)
- 請求包含(include)
1. 請求轉(zhuǎn)發(fā)
從servlet1請求轉(zhuǎn)發(fā)到servlet2 , 在servlet1完成一部分的功能,再跳轉(zhuǎn)到servlet2,繼續(xù)完成剩下的功能.請求轉(zhuǎn)發(fā)是服務(wù)器內(nèi)部把對一個request/response的處理權(quán)袋倔,移交給另外一個對于客戶端而言洞渤,它只知道自己最早請求的那個A,而不知道中間的B鲫忍,甚至C、D瞒爬。 傳輸?shù)男畔⒉粫G失芜飘。
語法 :
request.getRequestDispatcher(String path).forward(request,response);
參數(shù) :
path : 要轉(zhuǎn)發(fā)的路徑(資源的名稱)
特點 :
(1) 瀏覽器地址欄不發(fā)生改變,不會變?yōu)槟繕说刂?br>
(2) 整個流程都是在服務(wù)器端完成的
(3) 整個過程是一個請求,一個響應(yīng)
(4) 共享同一個請求中的數(shù)據(jù)
(5) 最終響應(yīng)給瀏覽器的 是由servlet2來決定
(6) 請求轉(zhuǎn)發(fā)不能跨域訪問,只能跳轉(zhuǎn)到當前應(yīng)用中的資源
(7) 請求轉(zhuǎn)發(fā)可以訪問WEB-INF目錄中的資源
2. 重定向
語法 :
response.sendRedirect(String url);
參數(shù) :
url : 目標資源地址
特點 :
(1) 瀏覽器地址欄發(fā)生改變 , 變成目標地址
(2) 在sendRedirect()里面是兩個請求棒旗,兩個響應(yīng)
(3) 因為URL重定向是兩個請求互不干擾,相互獨立 , 所以不共享請求中的數(shù)據(jù)
(4) 最終響應(yīng)給瀏覽器的 是由servlet2來決定(相當于把目標地址拷貝到瀏覽器地址欄 , 敲回車)
(5) URL重定向能跨域訪問 , 可以訪問其他應(yīng)用中的資源
(6) URL重定向不能訪問WEB-INF目錄中的資源
(7) 因為是從客戶端瀏覽器進行再次發(fā)送請求撩荣,所以在重定向過程中铣揉,之前傳輸?shù)男畔粊G失。
3. 請求包含 :
在一個頁面中可以包含其他頁面的內(nèi)容
在servlet中沒有意義
語法:
request.getRequestDispartcher(String path).include(req,resp)
4. 注意點:
- 如果需要跨域訪問 , 避免表單的重復(fù)提交 , 只能使用URL重定向
- 如果需要共享請求中的數(shù)據(jù) , 訪問WEB-INF中的資源 , 只能用請求轉(zhuǎn)發(fā)
例如一個網(wǎng)銀接口餐曹,因為web容器中想要訪問到網(wǎng)銀接口逛拱,必須要使用重定向,而重定向會把之前的信息丟失台猴,所以不能再request或者session中存數(shù)據(jù)給它使用朽合,只能通過在重定向的location中加入數(shù)據(jù)進行請求额湘。