jsp中redirect和forward的区别
生活随笔
收集整理的這篇文章主要介紹了
jsp中redirect和forward的区别
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在網(wǎng)上看到一些帖子,總結(jié)了一些區(qū)別,可以從以下幾個(gè)方面來看:
forward是服務(wù)器請(qǐng)求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容
再發(fā)給瀏覽器.瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容從哪里來的,所以它的地址欄還是原來的地址.
redirect是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請(qǐng)求那個(gè)地址.所以地址欄顯示的是新的URL.所
以redirect等于客戶端向服務(wù)器端發(fā)出兩次request,同時(shí)也接受兩次response。
forward:轉(zhuǎn)發(fā)頁面和轉(zhuǎn)發(fā)到的頁面可以共享request里面的數(shù)據(jù).
redirect:不能共享數(shù)據(jù).
redirect不僅可以重定向到當(dāng)前應(yīng)用程序的其他資源,還可以重定向到同一個(gè)站點(diǎn)上的其他應(yīng)用程序中的資源,
甚至是使用絕對(duì)URL重定向到其他站點(diǎn)的資源.
forward,方法只能在同一個(gè)Web應(yīng)用程序內(nèi)的資源之間轉(zhuǎn)發(fā)請(qǐng)求.
forward 是服務(wù)器內(nèi)部的一種操作.
redirect 是服務(wù)器通知客戶端,讓客戶端重新發(fā)起請(qǐng)求.
所以,你可以說 redirect 是一種間接的請(qǐng)求, 但是你不能說"一個(gè)請(qǐng)求是屬于forward還是redirect "
forward:一般用于用戶登陸的時(shí)候,根據(jù)角色轉(zhuǎn)發(fā)到相應(yīng)的模塊.
redirect:一般用于用戶注銷登陸時(shí)返回主頁面和跳轉(zhuǎn)到其它的網(wǎng)站等.
redirect:低.
<jsp:forward page={"relativeurl" | "<%= expression %>"} />
或者這樣寫:
<jsp:forward page={"relativeurl" | "<%= expression %>"} >
<jsp:param name="parametername" value="{parametervalue | <%= expression %>}" />+
</jsp:forward>?
<jsp:forward page="/servlet/login" />
<jsp:forward page="/servlet/login">
<jsp:param name="username" value="jsmith" />
</jsp:forward>
描述
<jsp:forward>標(biāo)簽從一個(gè)jsp文件向另一個(gè)文件傳遞一個(gè)包含用戶請(qǐng)求的request對(duì)象.<jsp:forward>標(biāo)簽以下的代碼,將不能執(zhí)行.
你能夠向目標(biāo)文件傳送參數(shù)和值,在這個(gè)例子中我們傳遞的參數(shù)名為username,值為scott,如果你使用了<jsp:param>標(biāo)簽的話,目標(biāo)文件必須是一個(gè)動(dòng)態(tài)的文件,能夠處理參數(shù).
如果你使用了非緩沖輸出的話,那么使用<jsp:forward>時(shí)就要小心。
如果在你使用<jsp:forward>之前,jsp文件已經(jīng)有了數(shù)據(jù),那么文件執(zhí)行就會(huì)出錯(cuò).
屬性
page="{relativeurl | <%= expression %>}"
這里是一個(gè)表達(dá)式或是一個(gè)字符串用于說明你將要定向的文件或url.這個(gè)文件可以是jsp,程序段,或者其它能夠處理request對(duì)象的文件(如asp,cgi,php).
<jsp:param name="parametername" value="{parametervalue | <%= expression %>}" />+
向一個(gè)動(dòng)態(tài)文件發(fā)送一個(gè)或多個(gè)參數(shù),這個(gè)文件一定是動(dòng)態(tài)文件.
如果你想傳遞多個(gè)參數(shù),你可以在一個(gè)jsp文件中使用多個(gè)<jsp:param>。name指定參數(shù)名,value指定參數(shù)值.
<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");%>得不到。
1.從地址欄顯示來說
forward是服務(wù)器請(qǐng)求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容
再發(fā)給瀏覽器.瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容從哪里來的,所以它的地址欄還是原來的地址.
redirect是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請(qǐng)求那個(gè)地址.所以地址欄顯示的是新的URL.所
以redirect等于客戶端向服務(wù)器端發(fā)出兩次request,同時(shí)也接受兩次response。
2.從數(shù)據(jù)共享來說
forward:轉(zhuǎn)發(fā)頁面和轉(zhuǎn)發(fā)到的頁面可以共享request里面的數(shù)據(jù).
redirect:不能共享數(shù)據(jù).
redirect不僅可以重定向到當(dāng)前應(yīng)用程序的其他資源,還可以重定向到同一個(gè)站點(diǎn)上的其他應(yīng)用程序中的資源,
甚至是使用絕對(duì)URL重定向到其他站點(diǎn)的資源.
forward,方法只能在同一個(gè)Web應(yīng)用程序內(nèi)的資源之間轉(zhuǎn)發(fā)請(qǐng)求.
forward 是服務(wù)器內(nèi)部的一種操作.
redirect 是服務(wù)器通知客戶端,讓客戶端重新發(fā)起請(qǐng)求.
所以,你可以說 redirect 是一種間接的請(qǐng)求, 但是你不能說"一個(gè)請(qǐng)求是屬于forward還是redirect "
3.從運(yùn)用地方來說
forward:一般用于用戶登陸的時(shí)候,根據(jù)角色轉(zhuǎn)發(fā)到相應(yīng)的模塊.
redirect:一般用于用戶注銷登陸時(shí)返回主頁面和跳轉(zhuǎn)到其它的網(wǎng)站等.
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>標(biāo)簽從一個(gè)jsp文件向另一個(gè)文件傳遞一個(gè)包含用戶請(qǐng)求的request對(duì)象.<jsp:forward>標(biāo)簽以下的代碼,將不能執(zhí)行.
你能夠向目標(biāo)文件傳送參數(shù)和值,在這個(gè)例子中我們傳遞的參數(shù)名為username,值為scott,如果你使用了<jsp:param>標(biāo)簽的話,目標(biāo)文件必須是一個(gè)動(dòng)態(tài)的文件,能夠處理參數(shù).
如果你使用了非緩沖輸出的話,那么使用<jsp:forward>時(shí)就要小心。
如果在你使用<jsp:forward>之前,jsp文件已經(jīng)有了數(shù)據(jù),那么文件執(zhí)行就會(huì)出錯(cuò).
屬性
page="{relativeurl | <%= expression %>}"
這里是一個(gè)表達(dá)式或是一個(gè)字符串用于說明你將要定向的文件或url.這個(gè)文件可以是jsp,程序段,或者其它能夠處理request對(duì)象的文件(如asp,cgi,php).
<jsp:param name="parametername" value="{parametervalue | <%= expression %>}" />+
向一個(gè)動(dòng)態(tài)文件發(fā)送一個(gè)或多個(gè)參數(shù),這個(gè)文件一定是動(dòng)態(tài)文件.
如果你想傳遞多個(gè)參數(shù),你可以在一個(gè)jsp文件中使用多個(gè)<jsp:param>。name指定參數(shù)名,value指定參數(shù)值.
<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");%>得不到。
總結(jié)
以上是生活随笔為你收集整理的jsp中redirect和forward的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ajax在请求数据时显示等待动画遮罩
- 下一篇: Sql Server内置函数实现MD5加