頁面跳轉的兩種方式:
// 1 轉發,地址欄上的URL不會改變 request.getRequestDispatcher("p3").forward(request,response);
// 2 重定向,地址欄的URL會改變 response.sendRedirect("p3");
這兩種方法有着本質的不同,requset是請求,是在服務器端運行的,response是相應,是在客戶端運行的;
例如:有3個頁面p1, p2, p3;
p1提交給p2, p2在轉發給p3;
如果用第一種方法,在p2發到到p3,由於是瀏覽器請求的是p2,請求的一些參數被封裝在request中,發給服務器,服務器用request.getRequestDispatcher("p3").forward(request,response);轉到p3,把p3發給瀏覽器,瀏覽器不知道被偷梁換柱了,所以URL還是p2;也完全可以用request.getParameter("name");得到p1中的表單控件的值,因為在這里用了forward()把request傳了下去。
如用第二種方法,這是瀏覽器主動請求了p3,所以瀏覽器知道請求的地址,所以URL變了,
而又一次請求,產生了另外一個request,這個和請求p2的request不同,所以在p3中用request.getParameter("name");得不到p1.jsp中的表單控件的值。
總結:
1、request.getRequestDispatcher("a").forward(rquest,response); request轉發,它可以保存request中的數據,頁面跳轉,但是地址是不調整的 。
2、response.sendRedirect("b"); 方式是重定向,它的數據是不共享的,也就是說 request中保存的數據在b頁面中是獲取不到的,這種方式是表單是不能重復提交的 ,
3、respons跳轉是可以實現跨域的,地址欄也會變化。