1. 程式人生 > >response.sendRedirect(url)與request.getRequestDispatcher(url).forward(request,response)的區別

response.sendRedirect(url)與request.getRequestDispatcher(url).forward(request,response)的區別

get 地址 參數 bsp for 頁面 內部 .get 運用


response.sendRedirect(url)跳轉到指定的URL地址,產生一個新的request,所以要傳遞參數只有在url後加參數,如:
url?id=1。
request.getRequestDispatcher(url).forward(request,response)是直接將請求轉發到指定URL,所以該請求能夠直接獲得上一個請求的數據,也就是說采用請求轉發,request對象始終存在,不會重新創建。而sendRedirect()會新建request對象,所以上一個request中的數據會丟失。
更具體來說就是這樣的:
redirect 會首先發一個response給瀏覽器, 然後瀏覽器收到這個response後再發一個requeset給服務器,然後服務器發新的response給瀏覽器。這時頁面收到的request是一個新從瀏覽器發來的。

forward 發生在服務器內部, 在瀏覽器完全不知情的情況下發給了瀏覽器另外一個頁面的response。這時頁面收到的request不是從瀏覽器直接發來了,可能己經用request.setAttribute在request裏放了數據.在轉到的頁面可直接用request.getAttribute獲得數據。


運用forward方法只能重定向到同一個Web應用程序中的一個資源。而sendRedirect方法可以讓你重定向到任何URL。

在asp.net裏,Response.Redirect和Server.Transfer這二者的區別也如是。

response.sendRedirect(url)與request.getRequestDispatcher(url).forward(request,response)的區別