5 回答

TA貢獻(xiàn)16條經(jīng)驗(yàn) 獲得超8個(gè)贊
回來(lái)填坑。先說(shuō)答案:前一題選D,后一題選A。我們來(lái)看下getRequestDispatche()和sendRedirect():
?????? getRequestDispatcher()前面是什么?request!既然是request,它必然是屬于服務(wù)器端的邏輯。而在這里,getRequestDispatcher()的作用就是轉(zhuǎn)發(fā)請(qǐng)求。完整的來(lái)講,一個(gè)請(qǐng)求包括request和response這兩個(gè)參數(shù),所以在getRequestDispatcher()后面接了一個(gè)forward(resquest,response);把這個(gè)請(qǐng)求轉(zhuǎn)發(fā)到了另個(gè)頁(yè)面。這里,一定要明白轉(zhuǎn)發(fā)這兩個(gè)字:對(duì)原有的對(duì)象不進(jìn)行修改,從A拿到B,這叫轉(zhuǎn)發(fā),它是一個(gè)服務(wù)器的內(nèi)部行為。所以在a.jsp收到轉(zhuǎn)發(fā)的request后,該requset還是有key為name的這個(gè)對(duì)象。你用getParameter("name")自然能夠獲取到value,也就是sase;
?????? 再來(lái)看看sendRedircet()。類似的,sendRedirect()前面是response對(duì)象。什么是response?你可以簡(jiǎn)單的理解為是服務(wù)器想告訴客戶端(在這里是瀏覽器)的一系列信息。那么,sendRedirect()這個(gè)動(dòng)作服務(wù)器想告訴客戶端什么信息呢?重定向!那什么是重定向又是什么呢?你可以理解為瀏覽器根據(jù)服務(wù)器的響應(yīng)信息重新向某個(gè)URL發(fā)起一次新的請(qǐng)求,而這個(gè)URL也是服務(wù)器告訴瀏覽器的,在這里就是sendRedirect()中的參數(shù)。也就是說(shuō),重定向是一個(gè)客戶端行為,對(duì)應(yīng)的URL地址欄會(huì)發(fā)生變化。這和你自己在地址欄輸入這個(gè)URL再回車,并沒(méi)有什么卵的區(qū)別。
?????? 明白了重定向的概念,我們回到你的題目上:重定向是客戶端行為,重新向某個(gè)URL發(fā)起請(qǐng)求,該請(qǐng)求的request和response信息都是新的,和上一次請(qǐng)求的request、response沒(méi)有一毛錢的關(guān)系。所以,重定向以后,在a.jsp頁(yè)面里面你收到request和response都是很干凈的,啥都沒(méi)攜帶,自認(rèn)也沒(méi)有name這個(gè)參數(shù),所以你這時(shí)候用getParameter()找不到name,自然給你返回了一個(gè)null值。顯示在頁(yè)面上也是null。
?????? 所以前一題選D,后一題選A。

TA貢獻(xiàn)223條經(jīng)驗(yàn) 獲得超56個(gè)贊
請(qǐng)求轉(zhuǎn)發(fā):request.getRequestDispatcher(“/xx.jsp”).forward(request,response);可以實(shí)現(xiàn)request域?qū)ο髷?shù)據(jù)共享(這一點(diǎn)很重要,日后學(xué)springmvc或者其他視圖框架會(huì)用到),地址欄不會(huì)反生變化(也就是一個(gè)請(qǐng)求)。
重定向:地址欄發(fā)生變化,request不能共享,兩次請(qǐng)求

TA貢獻(xiàn)98條經(jīng)驗(yàn) 獲得超73個(gè)贊
轉(zhuǎn)發(fā):request.getRequestDispatcher(“/xx.jsp”).forward(request,response);?其特點(diǎn)是:地址欄無(wú)變化,始終是一個(gè)請(qǐng)求,轉(zhuǎn)發(fā)的對(duì)象可以是本工程內(nèi)的任何頁(yè)面。
?重定向:就相當(dāng)于客戶端向服務(wù)器請(qǐng)求時(shí),服務(wù)器響應(yīng)給客戶端一個(gè)新的URL瀏覽器就把請(qǐng)求傳遞個(gè)一個(gè)新的頁(yè)面 。特點(diǎn)是:地址發(fā)生了變化,重定向的范圍沒(méi)有限制。
添加回答
舉報(bào)