jsp中页面间对象传递的方法:
1.传递方法有:page,request,session,application,其中cookie是保存在客户端的,是用来解决HTTP无状态问题。
2.Cookie对象变量,cookie是保存在客户端的,是用来解决HTTP无状态问题。
3.Cookie对象变量和session一样,他们不同的是,session是存在服务器端,而cookie是存放在客户端的。
4.Application对象的作用范围是整个全局,他对所有用户都有效,session和cookie是对一个用户而言,所以我们可以用它统计登陆该网站的人数。Application变量不会自己消亡,会始终占据内存,创建过多的变量会降低响应速度,只有在服务被中止、Global.asa被改变或者该Application被卸载下才会被终止。
5.QuerySting在页面间传递值。这种方法的写法:在要传递值的页面,Response.Redirect(url),值包含在在url中。接收值得页面,Request.QueryString["变量名"]。
传递方法有:page,request,session,application,其中cookie是保存在客户端的,是用来解决HTTP无状态问题。
Cookie对象变量,cookie是保存在客户端的,是用来解决HTTP无状态问题。
Cookie对象变量和session一样,他们不同的是,session是存在服务器端,而cookie是存放在客户端的。
Application对象的作用范围是整个全局,他对所有用户都有效,session和cookie是对一个用户而言,所以我们可以用它统计登陆该网站的人数。Application变量不会自己消亡,会始终占据内存,创建过多的变量会降低响应速度,只有在服务被中止、Global.asa被改变或者该Application被卸载下才会被终止。
QuerySting在页面间传递值。这种方法的写法:在要传递值的页面,Response.Redirect(url),值包含在在url中。接收值得页面,Request.QueryString["变量名"]。
在Jsp中页面与页面之间传递参数有几种方法?
1. 表单提交,这个没什么可说的。
2. URL重写,就是传参xxx.jsp.myid = 1。
3. jsp:param传递,用在jsp:forward或jsp:include 标签中。
例如:和上边的URL重写传递的参数完全相同,表示自动跳转到xxx.jsp,并包含参数。
1.QuerySting在页面间传递值
这种方法的写法:在要传递值的页面,Response.Redirect(url),值包含在在url中。接收值得页面,Request.QueryString["变量名"]。
这是使用起来很简单的一种方式,但是它不是很安全,因为值会在浏览器里的地址栏里显示。并且它也不能传递对象,对长度也有限制,如果要传递的值很多,且对安全要求也高的话,这种方式就不适合了。
2.Session变量
我们通常在一个页面中,将值放到session变量中,在另外几个页面使用它。Session变量存储过多的数据会消耗比较多的服务器资源,在使用时应该慎重。通常将登陆的用户名和密码防到session中,其他页面根据判断session中用户名和密码是否有值来判断用户是否登录。
写法:存入到session变量,Session["name"]=“要放入的值”;读取session中的值,变量名=Session["name"].ToString();
3.Cookie对象变量
Cookie对象变量和session一样,他们不同的是,session是存在服务器端,而cookie是存放在客户端的。
写法:将值存入到cookie中
HttpCookie userName=new HttpCookie("name");
userName.Value = "值";
Response.AppendCookie(userName);
读取cookie中的值
变量名 = Request.Cookies["userName"].Value.ToString();
4.使用Application 对象变量
Application对象的作用范围是整个全局,他对所有用户都有效,session和cookie是对一个用户而言,所以我们可以用它统计登陆该网站的人数。Application变量不会自己消亡,会始终占据内存,创建过多的变量会降低响应速度,只有在服务被中止、Global.asa被改变或者该Application被卸载下才会被终止。
写法:将值存入到application中, Application["name"] = "值";
读取值,变量名= Application["name"].ToString();
上面是我常用到的几种方式,当然还有其他方式。还有利用某些控件的PostBackUrl属性,使用Server.Transfer,使用@PreviousPageType指令,这些暂时没用过,在以后会试着用,用的多了就会有对比,就能知道在什么场合更适合哪种方式。
页面传输有多种方式: 1.url参数传递,适用于单个参数传递 父页面中 使用url带参数方式给字面传输参数test.jsp?para1=data1¶2=data2,参数使用&分割 子页面中 子页面中使用浏览器的getParameter获取url中传递过来的参数 <% String data1=request.getParameter("para1"); String data2=request.getParameter("para2"); %> 2.弹出窗口传递,适用于对象传输 父页面中:var obj = new Object();//定义一个传递给子页面的对象 obj.para1=data1; obj.para2=data2; var retObj = null;//用于接收模态窗口返回对象; 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; } 子页面中: 接收父页面传输过来的对象,一定要判断是否为空奥。
if(window.dialogArguments != null) var inputObj = g_Obj = window.dialogArguments; var para1 = inputObj.para1; var para2 = inputObj.para2; 子页面返回给父页面参数: var returnObj = new Object(); returnObj.retPara1 = "returnValue"; window.returnValue = returnObj;//将返回对象付个window的对象,这样父页面就以获得子页面传回的对象了。 window.close(); 3.使用window.open弹出页面,直接使用window.parent进行对象获取 a.html <body onl oad="b.html"> b.html <body onl oad="showInputPara();"> 需要注意的是这种方法只能获取a页面中的全局变量和对象,不能获取局部对象和变量 4.借助浏览器的Cookie 使用Cookie存在很多不稳定因素,这里不建议使用。
给出部分代码 Cookie cookie = new Cookie("key", "value"); //往Cookie中设置键值对,键必须唯一,值可以是对象 cookie.setMaxAge(60); //设置60秒生存期,如果设置为负值的话,则为浏览器进程Cookie(内存中保存),关闭浏览器就失效。 Cookie[] cookies = request.getCookies(); //获取Cookie中的键值对数组 5.借助session。
id=1; response. Redirect()。
. 2.使用Session变量3.使用Server.Transfer4.Application5.6.数据库使用QueryString 使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址栏上的(不安全),同时又不能传递对象,但是在传递的值少而安全性要求不高的情况下,这个方法还是一个不错的方案。使用这种方法的步骤如下: 1,使用控件创建web表单(form) 2,创建可以返回表单的按钮和链接按钮 3,在按钮或链接按钮的单击事件里创建一个保存URL的字符变量 4,在保存的URL里添加QueryString参数 5,使用Response.Redirect重定向到上面保存的URL 下面的代码片断演示了如何实现这个方法: 源页面代码: private void Button1_Click(object sender, System.EventArgs e) { string url; url="anotherwebform.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text; Response.Redirect(url); } 目标页面代码: private void Page_Load (object sender, System.EventArgs e) { Label1.Text=Request.QueryString["name"]; Label2.Text=Request.QueryString["email"]; }使用Session变量 使用Session变量是可以在页面间传递值的的另一种方式,在本例中我们把控件中的值存在Session变量中,然后在另一个页面中使用它,以不同页面间实现值传递的目的。
但是,需要注意的是在Session变量存储过多的数据会消耗比较多的服务器资源,在使用session时应该慎重,当然了,我们也应该使用一些清理动作来去除一些不需要的session来降低资源的无谓消耗。使用Session变量传递值的一般步骤如下: 1,在页面里添加必要的控件 2,创建可以返回表单的按钮和链接按钮 3,在按钮或链接按钮的单击事件里,把控件的值添加到session变量里 4,使用Response.Redirect方法重定向到另一个页面 5,在另一个页面提取session的值,在确定不需要使用该session时,要显式清除它 下面的代码片断演示了如何实现这个方法: 源页面代码: 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"); } 目标页面代码: 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 这个方法相比上面介绍的方法稍微复杂一点,但在页面间值传递中却是特别有用的,使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写一些代码以创建一些属性以便可以在另一个页面访问它,但是,这个方式带来的好处也是显而易见的。
总体来说,使用这种方法是简洁的同时又是面向对象的。使用这种方法的整个过程如下: 1,在页面里添加必要的控件 2,创建返回值的Get属性过程 3,创建可以返回表单的按钮和链接按钮 4,在按钮单击事件处理程序中调用Server.Transfer方法转移到指定的页面 5,在第二个页面中,我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了 以下代码综合实现上述步骤过程的代码: 源页面代码: 把以下的代码添加到页面中 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"); } 目标页面代码: private void Page_Load。
引言 Web页面是无状态的, 服务器对每一次请求都认为来自不同用户,因此,变量的状态在连续对同一页面的多次请求之间或在页面跳转时不会被保留。
在用ASP.NET 设计开发一个Web系统时, 遇到一个重要的问题是如何保证数据在页面间进行正确、安全和高效地传送,Asp.net 提供了状态管理等多种技术来解决保存和传递数据问题,以下来探讨.NET 下的解决此问题的各种方法和各自的适用场合。 1、ASP.NET页面间数据传递的各种方法和分析 1.1 使用Querystring 方法 QueryString 也叫查询字符串, 这种方法将要传递的数据附加在网页地址(URL)后面进行传递。
如页面A.aspx 跳转到页面B.aspx,可以用Request.Redirect("B.aspx?参数名称=参数值")方法,也可以用超链接:,页面跳转后,在目标页面中可用Ruquest["参数名称"]来接收参数。使用QuerySting 方法的优点是实现简单, 不使用服务器资源;缺点是传递的值会显示在浏览器的地址栏上,有被篡改的风险,不能传递对象,只有在通过URL 请求页时查询字符串才是可行的。
1.2 利用隐藏域 隐藏域不会显示在用户的浏览器中, 一般是在页面中加入一个隐藏控件, 与服务器进行交互时把值赋给隐藏控件并提交给下一页面。隐藏域可以是任何存储在网页中的与网页有关的信息的存储库。
使用隐藏域存入数值时用:hidden 控件.value=数值,取出接收数值时用:变量=hidden 控件.value。使用隐藏域的优点是实现简单, 隐藏域是标准的HTML 控件,不需要复杂的编程逻辑。
隐藏域在页上存储和读取,不需要任何服务器资源,几乎所有浏览器和客户端设备都支持具有隐藏域的窗体。缺点是存储结构少,仅仅支持简单的数据结构,存储量少,因为它被存储在页面本身,所以无法存储较大的值,而且大的数据量会受到防火墙和代理的阻止。
1.3 ViewState ViewState 是由ASP.NET 页面框架管理的一个隐藏的窗体字段。当ASP.NET 执行某个页面时,该页面上的ViewState 值和所有控件将被收集并格式化成一个编码字符串, 然后被分配给隐藏窗体字段的值属性。
使用ViewState 传递数据时可用:ViewState [" 变量名"]=数值,在取出数据时用:变量=ViewState["变量名"]。使用ViewState 的优点是:在对同一页的多个请求间自动保留值,不用服务器端资源,实现简单,视图状态中的值经过哈希计算和压缩,并且针对Unicode 实现进行编码,其安全性要高于使用隐藏域;缺点是因为ViewState 存储在页面本身,因此如果 存储较大的值,用户显示页和发送页时的速度可能会减慢。
虽然视图状态以哈希格式存储数据,但它仍可以被篡改。 1.4 使用Cookie Cookie 可以在页面之间传递少量信息, 可以存储在客户端的文本文件中,也可存储在客户端的内存中。
Cookie 方法适用于存储少量页面中经常改动的信息, 如为登陆过的网站保存登陆用户名,为用户输入提供方便,还有在一些用户自定义项目上保存用户的个性化设置。使用Cookie传递数据时可用:Response.Cookies["键名"]=键值;取出数据用:变量名=Request.Cookies["键名"]。
使用Cookie 优点是:Cookie 存储在客户端, 不使用服务器资源,实现简单,可配置到期时间。缺点是:可以存储的数据量比较少,由于Cookie 并不被所有的浏览器支持,而且还可能被用户禁止或删除,所以不能用于保存关键数据。
另外,Cookie 保存的形式是简单的明文文本,在它里面不宜保存敏感的、未加密的数据。 1.5 使用Application 变量 使用Application 变量也可以实现页面间的传值,Application变量是全局性的,所有用户共享一个Application 变量,一旦定义,它将影响到程序的所有部分。
如果想在整个应用程序范围使用某个变量值Application 对象将是最佳的选择。存入数据时, 把值添加到Application 变量里:Application["变量名"]=数值;取出数据用:变量=Application["变量名"];在不需要使用该Application 时,要显式清除它:Application["量名"]=null。
Application 优点:易于使用,全局范围。可供应用程序中的所有页来访问。
缺点:若保存数据的服务器端进程被损坏(如因服务器崩溃、升级或关闭而损坏),那么数据就会丢失,所以利用Application 一定要有保底的策略;占用服务器端的内存,这可能会影响服务器的性能以及应用程序的可伸缩性。 1.6 使用Session 变量 Session 对象可以用来存储需要维护的指定对话的信息,不同的客户端生成不同的Session 对象。
Session 用于存储特定于单独会话的短期信息。Session 的使用方法和格式与Application 相同。
优点:易于实现,并且提供较高的安全性和持久性,可以应对IIS 重启和辅助进程重启,可在多进程中使用。缺点是耗用服务器端的内存。
所以不要存储大量的信息。Session 最常见的用途是与Cookie 一起向Web 应用程序提供用户标识功能,Session也可用于不支持Cookie 的浏览器。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:3.296秒