跳轉包括兩種方式: 轉發 forward、重定向 redirect...
1.跳轉包括兩種方式:
- 轉發 forward
- 重定向 redirect
2.兩種方式的代碼:
AServlet類:
//向request範圍中存儲資料
request.setAttribute("username","zhangsan");
//轉發forward:一次請求
//request.getRequestDispatcher("/b").forward(request,response);
//另外一種跳轉方式是重定向
//重定向redirect:兩次請求
//執行到此處之後将這個路徑相應給浏覽器,浏覽器又向伺服器發送了一次全新的請求
response.sendRedirect("/prj_servlet_16_war_exploded/b");
BServlet類:
//從request範圍中取資料
Object obj = request.getAttribute("username");
System.out.println(obj);
- 轉發
request.getRequestDispatcher("/b").forward(request,response);
- 重定向:
response.sendRedirect(request.getContextPath() + "/b");
3.轉發和重定向的相同點和不同點:
- 相同點:
都可以完成資源跳轉
- 不同點:
* 觸發對象不同:
轉發是request對象觸發的,重定向是response對象觸發的
* 請求次數不同
轉發是一次請求,浏覽器位址欄上位址不會變化,重定向是兩次請求,浏覽器位址欄上的位址發生變化[/a-->/b]
* 路徑不同
重定向的路徑需要加webapp的根路徑,轉發是在本項目内完成資源跳轉
* 可跨範圍不同
重定向可以完成跨項目跳轉,跨app跳轉資源
4.跳轉的下一個資源可以是什麼?
- 跳轉的下一個資源可以是web伺服器中任何一種資源:可以是Servlet,也可以是html,也可以是JSP...
5.什麼時候采用轉發,什麼時候采用重定向?[大部分情況下都使用重定向]
* 若想完成跨app跳轉,必須使用重定向
* 若在上一個資源中向request範圍中存儲資料希望在下一個資源中從request範圍中将資料取出必須使用轉發
* 重定向可以解決浏覽器的重新整理問題
6.重定向原理是什麼?
a.response.sendRedirect("/jd/login");
b.程式執行到以上代碼,将請求路徑/jd/login回報給浏覽器,
c.浏覽器自動又向web伺服器發送了一次全新的請求:/jd/b
d.浏覽器位址欄上最終顯示的位址是:/jd/login