轉發和重定向的區別(轉)
重定向:以前的request中存放的變數全部失效,並進入一個新的request作用域。
轉發:以前的request中存放的變數不會失效,就像把兩個頁面拼到了一起。[@more@]
正文開始:
先是看上去不同,他們的呼叫分別如下:
request.getRequestDispatcher("apage.jsp").forward(request, response);//轉發到apage.jsp
response.sendRedirect("apage.jsp");//重定向到apage.jsp
在jsp頁面中你也會看到透過下面的方式實現轉發:
我在初學jsp的時候,對這兩個概念非常模糊,看別人的例子的時候,也是一頭霧水,不知道什麼時候該用哪個。希望下面的解說能對你有所幫
助。
提到轉發和重定向就不得不提到request作用域。很多初學者都知道當我們提交一個表單時,就建立了一個新的請求。實際上,當我們點選一個
連結時,也建立了一個新的請求。那麼一個請求的作用於到底有多大呢?例如:
在頁面a.jsp中有一個連結這是指向b的一個連結,而且還帶了一個引數。當我們點選這個連線的時候,就產生了一
個請求,為了明確起見,我們把它叫做requestA->B。現在,在b.jsp頁面中我們就可以從這個請求中獲取資訊了。在b.jsp中你可以寫入out.pr
intln(request.getParameter("id"))進行測試。下面更復雜一點,我們在b.jsp頁面中增加下面的語句:
request.setAttribute("name","funcreal");
out.println(request.getAttriblute("name"));//成功顯示了name變數的值。
現在在b.jsp中再增加一個連結:這是指向c的一個連結,而且還帶了一個引數,當我們點選這個連線的時候,將
產生一個新的請求,這時requestA-B也就安息了,新的請求叫做requestB-C。同樣的道理,在c.jsp中,我們可以訪問到的變數只有age,因為i
d,name這兩個變數都屬於requestA-B,此時他已經不存在了。下面是原始碼:
a.jsp
指向b.jsp,而且還帶了一個引數id=1。requestA-B現在誕生了
b.jsp
out.println("id=" + request.getParameter("id"));
request.setAttribute("name","Func Real");
out.println("name=" + request.getAttribute("name"));
%>
requestA-B已經結束了。指向c.jsp,而且還帶了一個引數age=23
c.jsp
out.println("id=" + request.getParameter("id"));
out.println("name=" + request.getAttribute("name"));
out.println("age=" + request.getParameter("age"));
%>
那麼轉發又是怎麼回事呢?現在增加一個頁面叫做d.jsp,並且在c.jsp中
相關文章
- 轉發和重定向的區別?
- 重定向和請求轉發的區別
- 轉發和重定向的過程和區別
- 轉發與重定向的區別
- 請求重定向和請求轉發的區別
- HTTP中的重定向和請求轉發的區別HTTP
- Javaweb的轉發與重定向的區別以及解決重定向不能共享資料的問題JavaWeb
- Spring MVC 轉發和重定向SpringMVC
- 【轉】mysql 和 redis的區別MySqlRedis
- HttpRequest 和HttpWebRequest的區別(轉)HTTPWeb
- 轉:SAN和NAS的區別
- Latch和Lock的區別(轉)
- editchanged 和 itemchanged 的區別(轉)
- JavaScript和Java的區別(轉)JavaScript
- InnoDB和MyISAM 區別(轉)
- frame和bounds的區別(轉載)
- (轉)ORACLE 中IN和EXISTS的區別Oracle
- Servlet中請求重定向和請求轉發和includeServlet
- (轉)編譯和連結的區別編譯
- malloc/free 和 new /delete 的區別 (轉)delete
- su和sudo的區別與使用(轉)
- 請求轉發與URL重定向
- 轉:IDOCBAPIRFC區別和聯絡API
- 【轉】理解 CI 和 CD 之間的區別
- disconnect session和kill session的區別 轉Session
- 在Oracle中session和process的區別(轉)OracleSession
- 【轉】C#中virtual和abstract的區別C#
- [轉]聚集索引和非聚集索引的區別索引
- java中list、set和map 的區別(轉)Java
- [轉]IPTABLES中SNAT和MASQUERADE的區別
- Linux和DOS的FORMAT命令區別(轉)LinuxORM
- Oracle DV和OLS以及VPD的區別(轉)Oracle
- 轉:samba和NFS的區別是什麼?SambaNFS
- Java入門:Hashtable和HashMap的區別(轉)JavaHashMap
- [轉] js == 與 === 的區別JS
- Vue中computed和watch的區別(轉載)Vue
- input屬性disabled和readonly的區別(轉)
- volatile和synchronized的區別與聯絡[轉]synchronized