請(qǐng)求轉(zhuǎn)發(fā):
請(qǐng)求轉(zhuǎn)發(fā),即request.getRequestDispatcher().forward(),是一種服務(wù)器的行為,客戶端只有一次請(qǐng)求,服務(wù)器端轉(zhuǎn)發(fā)后會(huì)將請(qǐng)求對(duì)象保存,地址欄中的URL地址不會(huì)改變,得到響應(yīng)后服務(wù)器端再將響應(yīng)發(fā)給客戶端;
請(qǐng)求重定向:
請(qǐng)求重定向,即response.sendRedirect(),是一種客戶端行文,從本質(zhì)上講等同于兩次請(qǐng)求,前一次請(qǐng)求對(duì)象不會(huì)保存,地址欄的URL地址會(huì)改變。
用生活中一個(gè)常見的例子來(lái)說(shuō)明兩者之間的區(qū)別,某人要去辦理護(hù)照:
轉(zhuǎn)發(fā):某人去了甲局,甲局看了之后,直到護(hù)照應(yīng)該由乙局來(lái)管,但甲局的工作人員并沒有趕走某人,而是讓某人等著,自己在辦公室后面聯(lián)系了乙局的工作人員,乙局護(hù)照辦好后送到了甲局,然后甲局的工作人員將護(hù)照交給了某人;
重定向:某人去了甲局后,甲局的工作人員說(shuō)護(hù)照不歸他們關(guān),應(yīng)該去乙局。然后某人自己去了乙局,辦了護(hù)照。
這里寫一個(gè)例子演示兩者的不同。新建一個(gè)web項(xiàng)目,創(chuàng)建三個(gè)頁(yè)面:reg.jsp、response.jsp、request.jsp。
reg.jsp代碼如下:
[html] view plain copyresponse.jsp代碼如下:
[html] view plain copy使用重定向時(shí),結(jié)果如下:
可以看到,輸入的用戶名沒有顯示出來(lái),這是因?yàn)橹囟ㄏ虮举|(zhì)上相當(dāng)于兩次請(qǐng)求,而前一次請(qǐng)求不保存,所以沒能得到用戶名。同時(shí),可以看到地址欄中的URL地址由response.jsp變?yōu)榱藃equest.jsp。
第二次,修改response.jsp的代碼如下:
[html] view plain copy可以看到,頁(yè)面得到了請(qǐng)求中的用戶名并進(jìn)行顯示,這是由于轉(zhuǎn)發(fā)時(shí)客戶端只有一次請(qǐng)求,服務(wù)器會(huì)保存這次請(qǐng)求,等到轉(zhuǎn)發(fā)返回時(shí)將結(jié)果返回給客戶端。同時(shí),頁(yè)面顯示的是request.jsp的內(nèi)容,但地址欄中的URL地址并沒有變化。
這就是請(qǐng)求轉(zhuǎn)發(fā)與請(qǐng)求重定向的區(qū)別。
新聞熱點(diǎn)
疑難解答
圖片精選