5 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
在Servlet中兩種實(shí)現(xiàn):
forward方式:request.getRequestDispatcher("/somePage.jsp").forward(request, response);
redirect方式:response.sendRedirect("/somePage.jsp");
forward是服務(wù)器內(nèi)部重定向,程序收到請(qǐng)求后重新定向到另一個(gè)程序,客戶機(jī)并不知道;redirect則是服務(wù)器收到請(qǐng)求后發(fā)送一個(gè)狀態(tài)頭給客戶,客戶將再請(qǐng)求一次,這里多了兩次網(wǎng)絡(luò)通信的來往。當(dāng)然forward也有缺點(diǎn),就是forward的頁面的路徑如果是相對(duì)路徑就會(huì)有些問題了。
forward 會(huì)將 request state , bean 等等信息帶往下一個(gè) jsp
redirect 是送到 client 端后再一次 request , 所以資料不被保留.
使用 forward 你就可以用 getAttribute() 來取的前一個(gè) jsp 所放入的 bean 等等資料

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊
forward是服務(wù)器內(nèi)部重定向,redirect則是服務(wù)器收到請(qǐng)求后發(fā)送一個(gè)狀態(tài)頭給客戶。
forward是服務(wù)器內(nèi)部重定向,程序收到請(qǐng)求后重新定向到另一個(gè)程序,客戶機(jī)并不知道。
redirect則是服務(wù)器收到請(qǐng)求后發(fā)送一個(gè)狀態(tài)頭給客戶,客戶將再請(qǐng)求一次,這里多了兩次網(wǎng)絡(luò)通信的來往。
forward也有缺點(diǎn),就是forward的頁面的路徑如果是相對(duì)路徑就會(huì)有些問題了。
forward是服務(wù)器請(qǐng)求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器。
redirect就是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請(qǐng)求那個(gè)地址,一般來說瀏覽器會(huì)用剛才請(qǐng)求的所有參數(shù)重新請(qǐng)求,所以session,request參數(shù)都可以獲取。
在有些情況下,比如,需要跳轉(zhuǎn)到一個(gè)其它服務(wù)器上的資源,則必須使用 sendRedirect。

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
前 者僅是容器中控制權(quán)的轉(zhuǎn)向,在客戶端瀏覽器地址欄中不會(huì)顯示出轉(zhuǎn)向后的地址;后者則是完全的跳轉(zhuǎn),瀏覽器將會(huì)得到跳轉(zhuǎn)的地址,并重新發(fā)送請(qǐng)求鏈接。這樣, 從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時(shí),盡量使用 forward() 方法,并且,這樣也有助于隱藏實(shí)際的鏈接。在有些情況下,比如,需要跳轉(zhuǎn)到一個(gè)其它服務(wù)器上的資源,則必須使用 sendRedirect() 方法。

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
forward是服務(wù)器請(qǐng)求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器,瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容是從哪兒來的,所以它的地址欄中還是原來的地址。 redirect就是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請(qǐng)求那個(gè)地址,一般來說瀏覽器會(huì)用剛才請(qǐng)求的所有參數(shù)重新請(qǐng)求,所以session,request參數(shù)都可以獲取。
添加回答
舉報(bào)