天天看點

關于web項目中的資源跳轉

跳轉包括兩種方式: 轉發 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