1.response.sendredirect(url);
新的頁面並不能處理舊頁面的pagecontext(request,response,...)對象,所以妳用request.getparameter(ff)企圖調用原頁面 request對象的參數,得到的自然是null
2.getservletcontext().getrequestdispatcher(url).forward(request,response);
forward函數已經把原頁面的request,response對象傳入新的頁面,因此這新舊頁面擁有相同的 request,response對象。request.getparameter(ff)就可以得到相應的值
3.servletcontext.getrequestdispatcher 路徑必須是相對上下文的絕對路徑 servletrequest.getrequestdispatcher 可以是相對也可以是絕對
服務器端進行轉向的4種方法:
1. servletcontext的getrequestdispatcher()
2. servletcontext的getnameddispatcher()
3. servletrequest的getrequestdispatcher()
4. servletresponse的sendredirect()進行轉向。
1.2.3 => forward() 4. sendredirect()
使用forward方法,因為這些這樣比較高效。只有在forward方法不能使用時,再使用servletresponse的sendredirect()方法。
<jsp:fordward>與 sendredirect 方法的比較
雖然 <jsp:fordward>與 sendredirect 方法,都可以將瀏覽器瀏覽的網頁,重導至另壹個網頁,但是兩者在原理上是不太相同。
a. <jsp:fordward> : 動作是利用伺服端,將資料輸出至緩沖區的機制,在前壹個網頁尚未輸出到客戶端前,取消資料的輸出,然後輸出另壹個網頁的資料,達到重導瀏覽器的效果。 優點: 兩網頁間可以分享 request 對象內的變量。
b. sendredirect : 動作是透過 ”)
直觀壹點: response.sendredirect(url); 對服務器的響應進行重定向。當server作出響應後,client客戶端的請求的生存周期就終止了。這個時候再用request.getparameter()或request.getattribute()得到的只能是null。 getservletcontext().getrequestdispatcher(url).forward(request,response); 它則可以認為是對client的請求(request) 進行傳遞,在server沒有進行響應前,即沒有response壹直可以進行傳遞--重定向。網友:alexlovejava 前者是的跳轉是的客戶端,後者是在服務器端,後者在跳轉的時候可以傳request對象,前者只能通過?穿參數,後者是forword(),這兩者在流轉的時候url的路徑不壹樣,在ie地址欄顯示的路徑也不壹樣,