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跳轉是可以實現跨域的 地址欄也會變化


推薦閱讀:
查看原文 >>
相關文章