jsp中頁面間對象傳遞的方法:
1.傳遞方法有:page,request,session,application,其中cookie是保存在客戶端的,是用來解決HTTP無狀態(tài)問題。
2.Cookie對象變量,cookie是保存在客戶端的,是用來解決HTTP無狀態(tài)問題。
3.Cookie對象變量和session一樣,他們不同的是,session是存在服務(wù)器端,而cookie是存放在客戶端的。
4.Application對象的作用范圍是整個全局,他對所有用戶都有效,session和cookie是對一個用戶而言,所以我們可以用它統(tǒng)計登陸該網(wǎng)站的人數(shù)。Application變量不會自己消亡,會始終占據(jù)內(nèi)存,創(chuàng)建過多的變量會降低響應(yīng)速度,只有在服務(wù)被中止、Global.asa被改變或者該Application被卸載下才會被終止。
5.QuerySting在頁面間傳遞值。這種方法的寫法:在要傳遞值的頁面,Response.Redirect(url),值包含在在url中。接收值得頁面,Request.QueryString["變量名"]。
傳遞方法有:page,request,session,application,其中cookie是保存在客戶端的,是用來解決HTTP無狀態(tài)問題。
Cookie對象變量,cookie是保存在客戶端的,是用來解決HTTP無狀態(tài)問題。
Cookie對象變量和session一樣,他們不同的是,session是存在服務(wù)器端,而cookie是存放在客戶端的。
Application對象的作用范圍是整個全局,他對所有用戶都有效,session和cookie是對一個用戶而言,所以我們可以用它統(tǒng)計登陸該網(wǎng)站的人數(shù)。Application變量不會自己消亡,會始終占據(jù)內(nèi)存,創(chuàng)建過多的變量會降低響應(yīng)速度,只有在服務(wù)被中止、Global.asa被改變或者該Application被卸載下才會被終止。
QuerySting在頁面間傳遞值。這種方法的寫法:在要傳遞值的頁面,Response.Redirect(url),值包含在在url中。接收值得頁面,Request.QueryString["變量名"]。
在Jsp中頁面與頁面之間傳遞參數(shù)有幾種方法?
1. 表單提交,這個沒什么可說的。
2. URL重寫,就是傳參xxx.jsp.myid = 1。
3. jsp:param傳遞,用在jsp:forward或jsp:include 標(biāo)簽中。
例如:和上邊的URL重寫傳遞的參數(shù)完全相同,表示自動跳轉(zhuǎn)到xxx.jsp,并包含參數(shù)。
1.QuerySting在頁面間傳遞值
這種方法的寫法:在要傳遞值的頁面,Response.Redirect(url),值包含在在url中。接收值得頁面,Request.QueryString["變量名"]。
這是使用起來很簡單的一種方式,但是它不是很安全,因為值會在瀏覽器里的地址欄里顯示。并且它也不能傳遞對象,對長度也有限制,如果要傳遞的值很多,且對安全要求也高的話,這種方式就不適合了。
2.Session變量
我們通常在一個頁面中,將值放到session變量中,在另外幾個頁面使用它。Session變量存儲過多的數(shù)據(jù)會消耗比較多的服務(wù)器資源,在使用時應(yīng)該慎重。通常將登陸的用戶名和密碼防到session中,其他頁面根據(jù)判斷session中用戶名和密碼是否有值來判斷用戶是否登錄。
寫法:存入到session變量,Session["name"]=“要放入的值”;讀取session中的值,變量名=Session["name"].ToString();
3.Cookie對象變量
Cookie對象變量和session一樣,他們不同的是,session是存在服務(wù)器端,而cookie是存放在客戶端的。
寫法:將值存入到cookie中
HttpCookie userName=new HttpCookie("name");
userName.Value = "值";
Response.AppendCookie(userName);
讀取cookie中的值
變量名 = Request.Cookies["userName"].Value.ToString();
4.使用Application 對象變量
Application對象的作用范圍是整個全局,他對所有用戶都有效,session和cookie是對一個用戶而言,所以我們可以用它統(tǒng)計登陸該網(wǎng)站的人數(shù)。Application變量不會自己消亡,會始終占據(jù)內(nèi)存,創(chuàng)建過多的變量會降低響應(yīng)速度,只有在服務(wù)被中止、Global.asa被改變或者該Application被卸載下才會被終止。
寫法:將值存入到application中, Application["name"] = "值";
讀取值,變量名= Application["name"].ToString();
上面是我常用到的幾種方式,當(dāng)然還有其他方式。還有利用某些控件的PostBackUrl屬性,使用Server.Transfer,使用@PreviousPageType指令,這些暫時沒用過,在以后會試著用,用的多了就會有對比,就能知道在什么場合更適合哪種方式。
頁面?zhèn)鬏斢卸喾N方式: 1.url參數(shù)傳遞,適用于單個參數(shù)傳遞 父頁面中 使用url帶參數(shù)方式給字面?zhèn)鬏攨?shù)test.jsp?para1=data1¶2=data2,參數(shù)使用&分割 子頁面中 子頁面中使用瀏覽器的getParameter獲取url中傳遞過來的參數(shù) <% String data1=request.getParameter("para1"); String data2=request.getParameter("para2"); %> 2.彈出窗口傳遞,適用于對象傳輸 父頁面中:var obj = new Object();//定義一個傳遞給子頁面的對象 obj.para1=data1; obj.para2=data2; var retObj = null;//用于接收模態(tài)窗口返回對象; retObj = window.showModalDialog("modal.htm",obj,"dialogWidth=200px;dialogHeight=100px"); if(retObj != null) {//retObj.retPara1為子頁面返回給父頁面的值,子頁面中使用window.returnValue這個對象給父頁面返回值;if(retObj.retPara1 != null)var retPara = retObj.retPara1; } 子頁面中: 接收父頁面?zhèn)鬏斶^來的對象,一定要判斷是否為空奧。
if(window.dialogArguments != null) var inputObj = g_Obj = window.dialogArguments; var para1 = inputObj.para1; var para2 = inputObj.para2; 子頁面返回給父頁面參數(shù): var returnObj = new Object(); returnObj.retPara1 = "returnValue"; window.returnValue = returnObj;//將返回對象付個window的對象,這樣父頁面就以獲得子頁面?zhèn)骰氐膶ο罅恕?window.close(); 3.使用window.open彈出頁面,直接使用window.parent進(jìn)行對象獲取 a.html <body onl oad="b.html"> b.html <body onl oad="showInputPara();"> 需要注意的是這種方法只能獲取a頁面中的全局變量和對象,不能獲取局部對象和變量 4.借助瀏覽器的Cookie 使用Cookie存在很多不穩(wěn)定因素,這里不建議使用。
給出部分代碼 Cookie cookie = new Cookie("key", "value"); //往Cookie中設(shè)置鍵值對,鍵必須唯一,值可以是對象 cookie.setMaxAge(60); //設(shè)置60秒生存期,如果設(shè)置為負(fù)值的話,則為瀏覽器進(jìn)程Cookie(內(nèi)存中保存),關(guān)閉瀏覽器就失效。 Cookie[] cookies = request.getCookies(); //獲取Cookie中的鍵值對數(shù)組 5.借助session。
id=1; response. Redirect()。
. 2.使用Session變量3.使用Server.Transfer4.Application5.6.數(shù)據(jù)庫使用QueryString 使用QuerySting在頁面間傳遞值已經(jīng)是一種很老的機(jī)制了,這種方法的主要優(yōu)點是實現(xiàn)起來非常簡單,然而它的缺點是傳遞的值是會顯示在瀏覽器的地址欄上的(不安全),同時又不能傳遞對象,但是在傳遞的值少而安全性要求不高的情況下,這個方法還是一個不錯的方案。使用這種方法的步驟如下: 1,使用控件創(chuàng)建web表單(form) 2,創(chuàng)建可以返回表單的按鈕和鏈接按鈕 3,在按鈕或鏈接按鈕的單擊事件里創(chuàng)建一個保存URL的字符變量 4,在保存的URL里添加QueryString參數(shù) 5,使用Response.Redirect重定向到上面保存的URL 下面的代碼片斷演示了如何實現(xiàn)這個方法: 源頁面代碼: private void Button1_Click(object sender, System.EventArgs e) { string url; url="anotherwebform.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text; Response.Redirect(url); } 目標(biāo)頁面代碼: private void Page_Load (object sender, System.EventArgs e) { Label1.Text=Request.QueryString["name"]; Label2.Text=Request.QueryString["email"]; }使用Session變量 使用Session變量是可以在頁面間傳遞值的的另一種方式,在本例中我們把控件中的值存在Session變量中,然后在另一個頁面中使用它,以不同頁面間實現(xiàn)值傳遞的目的。
但是,需要注意的是在Session變量存儲過多的數(shù)據(jù)會消耗比較多的服務(wù)器資源,在使用session時應(yīng)該慎重,當(dāng)然了,我們也應(yīng)該使用一些清理動作來去除一些不需要的session來降低資源的無謂消耗。使用Session變量傳遞值的一般步驟如下: 1,在頁面里添加必要的控件 2,創(chuàng)建可以返回表單的按鈕和鏈接按鈕 3,在按鈕或鏈接按鈕的單擊事件里,把控件的值添加到session變量里 4,使用Response.Redirect方法重定向到另一個頁面 5,在另一個頁面提取session的值,在確定不需要使用該session時,要顯式清除它 下面的代碼片斷演示了如何實現(xiàn)這個方法: 源頁面代碼: private void Button1_Click(object sender, System.EventArgs e) { //textbox1 and textbox2 are webform //controls Session["name"]=TextBox1.Text; Session["email"]=TextBox2.Text; Server.Transfer("anotherwebform.aspx"); } 目標(biāo)頁面代碼: private void Page_Load (object sender, System.EventArgs e) { Label1.Text=Session["name"].ToString(); Label2.Text=Session["email"].ToString(); Session.Remove("name"); Session.Remove("email"); }使用Server.Transfer 這個方法相比上面介紹的方法稍微復(fù)雜一點,但在頁面間值傳遞中卻是特別有用的,使用該方法你可以在另一個頁面以對象屬性的方式來存取顯露的值,當(dāng)然了,使用這種方法,你需要額外寫一些代碼以創(chuàng)建一些屬性以便可以在另一個頁面訪問它,但是,這個方式帶來的好處也是顯而易見的。
總體來說,使用這種方法是簡潔的同時又是面向?qū)ο蟮摹J褂眠@種方法的整個過程如下: 1,在頁面里添加必要的控件 2,創(chuàng)建返回值的Get屬性過程 3,創(chuàng)建可以返回表單的按鈕和鏈接按鈕 4,在按鈕單擊事件處理程序中調(diào)用Server.Transfer方法轉(zhuǎn)移到指定的頁面 5,在第二個頁面中,我們就可以使用Context.Handler屬性來獲得前一個頁面實例對象的引用,通過它,就可以使用存取前一個頁面的控件的值了 以下代碼綜合實現(xiàn)上述步驟過程的代碼: 源頁面代碼: 把以下的代碼添加到頁面中 public string Name { get { return TextBox1.Text; } } public string EMail { get { return TextBox2.Text; } } private void Button1_Click (object sender, System.EventArgs e) { Server.Transfer("anotherwebform.aspx"); } 目標(biāo)頁面代碼: private void Page_Load。
引言 Web頁面是無狀態(tài)的, 服務(wù)器對每一次請求都認(rèn)為來自不同用戶,因此,變量的狀態(tài)在連續(xù)對同一頁面的多次請求之間或在頁面跳轉(zhuǎn)時不會被保留。
在用ASP.NET 設(shè)計開發(fā)一個Web系統(tǒng)時, 遇到一個重要的問題是如何保證數(shù)據(jù)在頁面間進(jìn)行正確、安全和高效地傳送,Asp.net 提供了狀態(tài)管理等多種技術(shù)來解決保存和傳遞數(shù)據(jù)問題,以下來探討.NET 下的解決此問題的各種方法和各自的適用場合。 1、ASP.NET頁面間數(shù)據(jù)傳遞的各種方法和分析 1.1 使用Querystring 方法 QueryString 也叫查詢字符串, 這種方法將要傳遞的數(shù)據(jù)附加在網(wǎng)頁地址(URL)后面進(jìn)行傳遞。
如頁面A.aspx 跳轉(zhuǎn)到頁面B.aspx,可以用Request.Redirect("B.aspx?參數(shù)名稱=參數(shù)值")方法,也可以用超鏈接:,頁面跳轉(zhuǎn)后,在目標(biāo)頁面中可用Ruquest["參數(shù)名稱"]來接收參數(shù)。使用QuerySting 方法的優(yōu)點是實現(xiàn)簡單, 不使用服務(wù)器資源;缺點是傳遞的值會顯示在瀏覽器的地址欄上,有被篡改的風(fēng)險,不能傳遞對象,只有在通過URL 請求頁時查詢字符串才是可行的。
1.2 利用隱藏域 隱藏域不會顯示在用戶的瀏覽器中, 一般是在頁面中加入一個隱藏控件, 與服務(wù)器進(jìn)行交互時把值賦給隱藏控件并提交給下一頁面。隱藏域可以是任何存儲在網(wǎng)頁中的與網(wǎng)頁有關(guān)的信息的存儲庫。
使用隱藏域存入數(shù)值時用:hidden 控件.value=數(shù)值,取出接收數(shù)值時用:變量=hidden 控件.value。使用隱藏域的優(yōu)點是實現(xiàn)簡單, 隱藏域是標(biāo)準(zhǔn)的HTML 控件,不需要復(fù)雜的編程邏輯。
隱藏域在頁上存儲和讀取,不需要任何服務(wù)器資源,幾乎所有瀏覽器和客戶端設(shè)備都支持具有隱藏域的窗體。缺點是存儲結(jié)構(gòu)少,僅僅支持簡單的數(shù)據(jù)結(jié)構(gòu),存儲量少,因為它被存儲在頁面本身,所以無法存儲較大的值,而且大的數(shù)據(jù)量會受到防火墻和代理的阻止。
1.3 ViewState ViewState 是由ASP.NET 頁面框架管理的一個隱藏的窗體字段。當(dāng)ASP.NET 執(zhí)行某個頁面時,該頁面上的ViewState 值和所有控件將被收集并格式化成一個編碼字符串, 然后被分配給隱藏窗體字段的值屬性。
使用ViewState 傳遞數(shù)據(jù)時可用:ViewState [" 變量名"]=數(shù)值,在取出數(shù)據(jù)時用:變量=ViewState["變量名"]。使用ViewState 的優(yōu)點是:在對同一頁的多個請求間自動保留值,不用服務(wù)器端資源,實現(xiàn)簡單,視圖狀態(tài)中的值經(jīng)過哈希計算和壓縮,并且針對Unicode 實現(xiàn)進(jìn)行編碼,其安全性要高于使用隱藏域;缺點是因為ViewState 存儲在頁面本身,因此如果 存儲較大的值,用戶顯示頁和發(fā)送頁時的速度可能會減慢。
雖然視圖狀態(tài)以哈希格式存儲數(shù)據(jù),但它仍可以被篡改。 1.4 使用Cookie Cookie 可以在頁面之間傳遞少量信息, 可以存儲在客戶端的文本文件中,也可存儲在客戶端的內(nèi)存中。
Cookie 方法適用于存儲少量頁面中經(jīng)常改動的信息, 如為登陸過的網(wǎng)站保存登陸用戶名,為用戶輸入提供方便,還有在一些用戶自定義項目上保存用戶的個性化設(shè)置。使用Cookie傳遞數(shù)據(jù)時可用:Response.Cookies["鍵名"]=鍵值;取出數(shù)據(jù)用:變量名=Request.Cookies["鍵名"]。
使用Cookie 優(yōu)點是:Cookie 存儲在客戶端, 不使用服務(wù)器資源,實現(xiàn)簡單,可配置到期時間。缺點是:可以存儲的數(shù)據(jù)量比較少,由于Cookie 并不被所有的瀏覽器支持,而且還可能被用戶禁止或刪除,所以不能用于保存關(guān)鍵數(shù)據(jù)。
另外,Cookie 保存的形式是簡單的明文文本,在它里面不宜保存敏感的、未加密的數(shù)據(jù)。 1.5 使用Application 變量 使用Application 變量也可以實現(xiàn)頁面間的傳值,Application變量是全局性的,所有用戶共享一個Application 變量,一旦定義,它將影響到程序的所有部分。
如果想在整個應(yīng)用程序范圍使用某個變量值A(chǔ)pplication 對象將是最佳的選擇。存入數(shù)據(jù)時, 把值添加到Application 變量里:Application["變量名"]=數(shù)值;取出數(shù)據(jù)用:變量=Application["變量名"];在不需要使用該Application 時,要顯式清除它:Application["量名"]=null。
Application 優(yōu)點:易于使用,全局范圍。可供應(yīng)用程序中的所有頁來訪問。
缺點:若保存數(shù)據(jù)的服務(wù)器端進(jìn)程被損壞(如因服務(wù)器崩潰、升級或關(guān)閉而損壞),那么數(shù)據(jù)就會丟失,所以利用Application 一定要有保底的策略;占用服務(wù)器端的內(nèi)存,這可能會影響服務(wù)器的性能以及應(yīng)用程序的可伸縮性。 1.6 使用Session 變量 Session 對象可以用來存儲需要維護(hù)的指定對話的信息,不同的客戶端生成不同的Session 對象。
Session 用于存儲特定于單獨會話的短期信息。Session 的使用方法和格式與Application 相同。
優(yōu)點:易于實現(xiàn),并且提供較高的安全性和持久性,可以應(yīng)對IIS 重啟和輔助進(jìn)程重啟,可在多進(jìn)程中使用。缺點是耗用服務(wù)器端的內(nèi)存。
所以不要存儲大量的信息。Session 最常見的用途是與Cookie 一起向Web 應(yīng)用程序提供用戶標(biāo)識功能,Session也可用于不支持Cookie 的瀏覽器。
聲明:本網(wǎng)站尊重并保護(hù)知識產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請在一個月內(nèi)通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁面生成時間:3.296秒