1. 程式人生 > >Javaweb中頁面跳轉的幾種方式

Javaweb中頁面跳轉的幾種方式

1.轉發

  request.getRequestDispatcher("/homework0608/1.jsp").forward(request, response);

2.重定向    

方式一:

      response.setHeader("Refresh","5,URL=http://localhost:8888/homework0606/login.jsp") ;

方式二:

        response.setStatus(302);  

        response.setHeader("location","newurl"); 

方式三:response.sendRedirect(newurl

);

重定向小結

* 重定向是兩次請求

* 重定向的URL可以是其他應用,也可是本應用

* 重定向的響應頭為302,必須要有Location響應頭

* 重定向不需要再使用response.getWriter()或者response.getOutputStream.


3.其他方式

標籤:<jsp:forward page="apage.jsp" />

      <meta http-equiv="refresh" content="0; URL=http://www.csdn.net">  

連結:<a href=”1.jsp”></a>

 

重定向域轉發的

區別:

重定向是客戶端行為,轉發是伺服器行為

重定向過程:客戶瀏覽器傳送http請求—>web伺服器接受後傳送302狀態碼響應及對應新的location給客戶瀏覽器—>客戶瀏覽器發現是302響應,則自動再發送一個新的http請求,請求url是新的location地址—>伺服器根據此請求尋找資源併發送給客戶。在這裡location可以重定向到任意URL,既然是瀏覽器重新發出了請求,則就沒有什麼request傳遞的概念了。在客戶瀏覽器路徑欄顯示的是其重定向的路徑,客戶可以觀察到地址的變化的。重定向行為是瀏覽器做了至少兩次的訪問請求的。

轉發過程:客戶瀏覽器傳送http請求—>web

伺服器接受此請求--->呼叫內部的一個方法在容器內部完成請求處理和轉發動作—>將目標資源傳送給客戶;在這裡,轉發的路徑必須是同一個web容器下的url,其不能轉向到其他的web路徑上去,中間傳遞的是自己的容器內的request。在客戶瀏覽器路徑欄顯示的仍然是其第一次訪問的路徑,也就是說客戶是感覺不到伺服器做了轉發的。轉發行為是瀏覽器只做了一次訪問請求。

轉發和重定向的比較:

* 請求轉發是一個請求,重定向是兩個請求

* 請求轉發後瀏覽器的URL不會發生改變(引數除外),重定向後瀏覽器的URL會發生改變

* 請求轉發的目標只能是本應用資源,而重定向可一個其他應用

* 請求轉發AServletBServlet,要麼都是GET,要麼都是POST,取決於AServlet

* 重定向第二個請求一定是GET

* 轉發由request呼叫方法,重定向是response