問題?細談getRequestDispatcher()與sendRedirect()的區別
首先我們要知道:
(1)request.getRequestDispatcher()是請求轉發,前后頁面共享一個request ; 這個是在服務端運行的,對瀏覽器來說是透明的。
(2)response.sendRedirect()是重新定向,前后頁面不是一個request。而這個是在瀏覽器端運行的。
1) redirect 方式
response.sendRedirect("/a.jsp");
頁面的路徑是相對路徑。sendRedirect可以將頁面跳轉到任何頁面,不一定局限於本web應用中,如:
response.sendRedirect("URL");
跳轉后瀏覽器地址欄變化。
這種方式要傳值出去的話,只能在url中帶parameter或者放在session中,無法使用request.setAttribute來 傳遞。所以該方式只適用於無傳值跳轉
2) forward方式
request.getRequestDispatcher("/路徑(可以是jsp路徑也可以是servlet)") .forward(request, response);
如:
request.getRequestDispatcher("/2.jsp)") .forward(request, response);
request.getRequestDispatcher("/servlet/HomeServlet)") .forward(request, response);
Servlet頁面跳轉的路徑是相對路徑。forward方式只能跳轉到本web應用中的頁面上。
跳轉后瀏覽器地址欄不會變化。
使用這種方式跳轉,傳值可以使用三種方法:url中帶parameter,session,request.setAttribute
用這個方法,可以將系統中的重定向問題 再次的沖跳轉。