ASP.NET页面基本对象:Application、Session、Request、Response、Server、Cookie、ViewState

 

1. Application、

 

所有的用户共用 (经典实例:统计网页访问人数),全局变量

 

1).Application对象来自于HttpApplictionState类,它可以在多个请求、连接之间共享公用信息,也可以在各个请求和连接之间充当信息传递的通道。

2).Application对象是共有的对象,所有用户都可以对某个特定的Application对象进行修改。

3).当用户第一次访问某虚拟目录的资源时Application对象被创建,退出应用程序或关闭服务器时被撤销。Application对象变量中止于停止IIS服务

 

   需要注意的点:

1). 因为Application是共有的,一般在Global.asax文件中设置

2). 为避免并发情况,使用lock方法

               Application.Lock();

               Application["Count"] = int.Parse(Application["Count"].ToString()) + 1;

               Session["MyID"] = 0;

               Application.UnLock();

3). Application对象利用“键—值”对的字典方法来定义,

   其中“键”为字符串,代表状态的“名”,“值”可以是任何类型的数据。

              Application.Add("count", 1);  //键值对的方法

              Application["msg"] = "My Name";

              Application.Clear();     //清除Application集合中的内容。

              Application.RemoveAll();

 

 

2. Session、

 

Session 对象可以保存任何数据类型

 

1)、HttpSessionState类的一个实例,其功能和Application对象类似,都是用来存储跨网页程序的变量或者对象。

2)、Session对象变量只针对单一网页使用者,也就是说各个连接的机器有各自的Session对象变量,不同的客户端无法互相存取。

3)、Session对象变量中止于联机机器离线时,也就是当网页使用者关掉浏览器或超过设定Session变量对象的有效时间时,Session对象变量就会消失。

 

什么是会话状态?会话状态(Session State)是为单个用户保留的状态。

 

3. Request、

 

功能是从客户端得到数据。

 

一般第一次访问页面是使用get传值,回发是使用post方式传值。

在接受上一个页面传递过来的值时:

如果上一页使用的是get方式传值,那么就是使用'Request.QueryString["上一页需要传递值的控件ID"]'接收;

如果上一页使用的是post方式传值,那么就使用'Request.Form["上一页需要传递值的控件ID"]'接收。

 

Request对象它提供对当前页请求的访问,其中包括请求标题、Cookie、客户端证书、查询字符串等,你可以使用此类来读取浏览器已经发送的内容。

服务端常常使用Request对象从客户端得到数据信息

它有两个常用方法:

Form[]和QueryString[]方法。

客户端提交的方式有:

          get: 对应Request.QueryString[] 这是使用Url路径值提交。也称显示提交。

          post: 对应Request.Form[] 也称隐式提交。这是浏览器默认的提交方式。他是靠控件的name和value传递值的。不识别ID属性,所以对于HTML页面控件必须要有Name属性。

 

4. Response、

 

功能是向浏览器输出信息。

 

Response.End(); 当遇到"Response.End();"时表示所有程序结束

Response.Write(""); 输出自定义信息

Response.Redirect("Default.aspx"); 表示跳转到指定的"Default.aspx"页面(服务器端跳转,客服端无法感知,属于客服端的请求)

 

5. Server、

 

Server对象提供的方法和属性可以访问服务器。

 

Server.MapPath("."); 表示当前所在的目录

Server.MapPath("../"); 表示当前所在的目录的上一级目录

Server.MapPath("http://www.cnblogs.com/"); 表示当前所在的目录的上一级目录的上一级目录

Server.MapPath("~/"); 表示当前程序的根目录

Server.Execute 方法是运行指定的页面并将结果返回到当前页面输出(不跳转到指定执行的页面,内部执行)

Server.Transfer 方法是终止当前页面,跳转到指定的页面执行(终止当前页的执行,并为当前请求开始执行新页。)

 

HttpServerUtility类的一个实例,它定义了一个与Web服务器相关的类提供对服务器上的方法和属性的访问。

用法:

?        当前文件所在物理路径:Response.Write(Server.MapPath("."));

?        HTML编码:Response.Write(Server.HtmlEncode("<h1>好好学习,<br><h3>天天向上"));

?        URL编码:Response.Write(Server.UrlEncode("<h1>好好学习,<br><h3>天天向上"));

        解码:Response.Write(Server.HtmlEncode(str));

?        Server.Execute方法允许当前的ASPX页面执行一个同一Web服务器上的指定ASPX页面,当指定的ASPX页面执行完毕,控制流程重新返回原页面发出Server.Execute调用的位置。

?        Server.Transfer

?        它是从server端直接向下一页发起请求,不需要client再次发送请求. 如果你的网页非常依赖Response.Redirect,这个小小的改变可以提高将近25%的效率。

 

6. Cookie、

 

Cookie对象的创建:

HttpCookie cookie=new HttpCookie("Cookie名称","保存的值");

//指定Cookie的生命周期,如果没有指定cookie的生命周期那么系统会自动当做临时cookie处理,(这里表示生命周期为10天)

cookie.Expires=DateTine.Now.AddDays(10);

//把创建好的Cookie对象添加到客户端cookie文件

Response.Cookies.Add(cookie);

 

//读取Cookie文件信息

Request.cookie["Cookie名称"];

 

HttpCookieCollection类的一个实例,它用于保存客户端浏览器请求的服务器页面,也可以用它存取非敏感性的用户信息,信息保存的时间可以根据需要设置。

Cookie对象的所有信息保存在客户机器上。

 

7. ViewState

 

类似于Session对象,只是ViewState不存在生命周期,即在页面关闭之前视图状态对象是不会消失的。

ViewState只局限于某个页面,而不能跨页面使用。使用bass64编码方式保存。

 

容易混绕的知识点区分:

 

1.  Application和Session的相同点和不同点:

Application对象和Session对象都属于服务器对象,用来保存页面中或用户的一些数据。

Application对象是共有的对象,所有用户都可以对某个特定的Application对象进行修改。Session对象变量只针对单一网页使用者,也就是说各个连接的机器有各自的Session对象变量,不同的客户端无法互相存取。

 

Application对象变量中止于停止IIS服务;Session对象变量中止于联机机器离线时,也就是当网页使用者关掉浏览器或超过设定Session变量对象的有效时间时,Session对象变量就会消失。

 

2.Session和Cookie的相同点和不同点:

?        可以保存用户信息。

?        不同的是,Session对象的所有信息保存在服务器上,而Cookie对象的所有信息保存在客户机器上。

 

3.Server.Execute()和Server.Transfer()和Response.Redirect()的区别:

?        Server.Execute方法允许当前的ASPX页面执行一个同一Web服务器上的指定ASPX页面,当指定的ASPX页面执行完毕,控制流程重新返回原页面发出Server.Execute调用的位置。

?        Server.Transfer

?        它是从server端直接向下一页发起请求,不需要client再次发送请求. 如果你的网页非常依赖Response.Redirect,这个小小的改变可以提高将近25%的效率。

用自己的话来说:

Server.Execute()会把所请求的页面加载到本页的前面和合并成一个页面。而Server.Transfer()把所请求的页面调过来加载到本页显示。

Server.Execute()和Server.Transfer()都是从服务器中发出的请求。而Response.Redirect()是从客户端发出的请求。

所以Response.Redirect()要重新发一次请求呈现页面。在本页面执行完成后,呈现另外页面时本页面在内存当中会自动卸载。

 

 

Server.Execute 方法是运行指定的页面并将结果返回到当前页面输出(不跳转到指定执行的页面,内部执行)

Server.Transfer 方法是终止当前页面,跳转到指定的页面执行(终止当前页的执行,并为当前请求开始执行新页。)

 

Response.Redirect("Default.aspx"); 表示跳转到指定的"Default.aspx"页面(服务器端跳转,客服端无法感知,属于客服端的请求)