jsp中jsp:forward 與 redirect區別

在網上看到一些帖子,總結了一些區別,能夠從如下幾個方面來看:
1.從地址欄顯示來講
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,而後把這些內容
再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪裏來的,因此它的地址欄仍是原來的地址.
redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器從新去請求那個地址.因此地址欄顯示的是新的URL.所
以redirect等於客戶端向服務器端發出兩次request,同時也接受兩次response。
2.從數據共享來講
forward:轉發頁面和轉發到的頁面能夠共享request裏面的數據.
redirect:不能共享數據.
redirect不只能夠重定向到當前應用程序的其餘資源,還能夠重定向到同一個站點上的其餘應用程序中的資源,
甚至是使用絕對URL重定向到其餘站點的資源.
forward,方法只能在同一個Web應用程序內的資源之間轉發請求.
forward 是服務器內部的一種操做.
redirect 是服務器通知客戶端,讓客戶端從新發起請求.
因此,你能夠說 redirect 是一種間接的請求, 可是你不能說"一個請求是屬於forward仍是redirect "
3.從運用地方來講
forward:通常用於用戶登錄的時候,根據角色轉發到相應的模塊.
redirect:通常用於用戶註銷登錄時返回主頁面和跳轉到其它的網站等.
4.從效率來講
forward:高.
redirect:低.
5.jsp 語法
<jsp:forward page={"relativeurl" | "<%= expression %>"} />
或者這樣寫:
<jsp:forward page={"relativeurl" | "<%= expression %>"} >
<jsp:param name="parametername" value="{parametervalue | <%= expression %>}" />+
</jsp:forward>
6.例子
<jsp:forward page="/servlet/login" />
<jsp:forward page="/servlet/login">
<jsp:param name="username" value="jsmith" />
</jsp:forward>
描述
<jsp:forward>標籤從一個jsp文件向另外一個文件傳遞一個包含用戶請求的request對象.<jsp:forward>標籤如下的代碼,將不能執行.
你可以向目標文件傳送參數和值,在這個例子中咱們傳遞的參數名爲username,值爲scott,若是你使用了<jsp:param>標籤的話,目標文件必須是一個動態的文件,可以處理參數.
若是你使用了非緩衝輸出的話,那麼使用<jsp:forward>時就要當心。
若是在你使用<jsp:forward>以前,jsp文件已經有了數據,那麼文件執行就會出錯.
屬性
page="{relativeurl | <%= expression %>}"
這裏是一個表達式或是一個字符串用於說明你將要定向的文件或url.這個文件能夠是jsp,程序段,或者其它可以處理request對象的文件(如asp,cgi,php).
<jsp:param name="parametername" value="{parametervalue | <%= expression %>}" />+
向一個動態文件發送一個或多個參數,這個文件必定是動態文件.
若是你想傳遞多個參數,你能夠在一個jsp文件中使用多個<jsp:param>。name指定參數名,value指定參數值.
<jsp:forward>例子
<%@ page contentType="text/html;charset=gb2312" %>
<html>
       <head>
              <title>test</title>
       </head>
       <body>
              <jsp:forward page="forwardTo.jsp">
                     <jsp:param name="userName" value="riso"/>
              </jsp:forward>
       </body>
</html>
forwardTo.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<!--forwardTo.jsp-->
<%
       String useName=request.getParameter("userName");
       String outStr= "謝謝光臨!";
       outStr+=useName;
       out.println(outStr);
%>
redirect的例子:
譬如:client 經過XXX\index.jsp?name=gauss&pwd=123訪問index.jsp,而index.jsp中有< jsp:forward page="login.jsp"/>,則在login.jsp中能夠經過request.getParameter()獲得name和pwd,而<%response.sendRedirect("login.jsp");%>得不到。
來自: http://hi.baidu.com/168zlf/blog/item/696ae18b44a209799e2fb483.html
相關文章
相關標籤/搜索