1. 程式人生 > 實用技巧 >關於web專案中的資源跳轉

關於web專案中的資源跳轉

關於web系統中資源跳轉:
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.重定向原理是什麼?
response.sendRedirect("/jd/login");
程式執行到以上程式碼,將請求路徑/jd/login反饋給瀏覽器,
瀏覽器自動又向web伺服器傳送了一次全新的請求:/jd/b
瀏覽器位址列上最終顯示的地址是:/jd/login