jsp request跳轉頁面和response跳轉頁面

jsp或Servlet都會用到頁面跳轉,可以用
request.getRequestDispatcher("p3.jsp").forward(request,response);這種方法稱爲轉發,地址欄上的URL不會改變;
response.sendRedirect("p3.jsp");這種方法稱爲重定向,地址欄的URL會改變;
這樣實現跳轉到p3.jsp;可是這兩種方法有着本質的不同,requset是請求,是在服務器端運行的,response是相應,是在客戶端運行的;

例如:
有3個頁面p1.jsp , p2.jsp , p3.jsp ; 
p1.jsp提交給p2.jsp , p2.jsp在轉發給p3.jsp 
如果在p2用第一種方法發到到p3,由於是瀏覽器請求的是p2,請求的一些參數被封裝在request中,發給服務器,服務器用request.getRequestDispatcher("p3.jsp").forward(request,response);轉到p3,把p3發給瀏覽器,瀏覽器不知道被偷樑換柱了,所以URL還是p2.jsp;也完全可以用request.getParameter("name");得到p1.jsp中的表單控件的值,因爲在這裏用了forward()把request傳了下去

如用第二種方法,這是瀏覽器主動請求了p3,所以瀏覽器知道請求的地址,所以URL變了,
而又一次請求,產生了另外一個request,這個和請求p2的request不同,所以在p3中用request.getParameter("name");得不到p1.jsp中的表單控件的值

總結:
1、request.getRequestDispatcher("a.jsp").forward(rquest,response); request轉發 它可以保存request中的數據 頁面調整 但是地址是不調整的 
2、response.sendRedirect("b.jsp"); 方式是重定向 它的數據是不共享的 也就是說 request中保存的數據在b.jsp頁面中是獲取不到的 這種方式是表單是不能重複提交的 ,
respons跳轉是可以實現跨域的 地址欄也會變化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章