为什么学习ASP.NET内置对象
在ASP.NET中微软提供了多种内置对象提供开发人员使用,在实际开发中内置对象的使用不可或缺的,在Web网站的数据交互,网页服务器交互,网页跳转,服务器数据的传输等其着举足轻重的作用。在初学ASP.NET技术中也是非常重要的环节,也是更深学习ASP.NET的“里程碑”。本文章主要介绍ASP.NET的内置对象的使用、属性、方法和工作原理。ASP.NET的内置对象主要包括:Response、Response、Session、Cookie、Application、Server
一、Request对象
Request对象用来获取客户端在请求一个页面或传送一个Form是提供的所有信息。它包括用户的HTTP变量、能够识别的浏览器、存储客户端的Cookie信息和请求地址等。
Request对象是System.Web.httpRequest类的对象
1.属性
(1) QueryString :获取HTTP查询字符串变量集合,主要用于收集HTTP协议中Get请求发送的数据
(2)Form :获取窗体或页面变量的集合,用于收集Post方法发送的请求数据
(3)ServerVarible:环境变量集合包含了服务器和客户端的系统内信息
(4)Params:它是QueryString、Form和ServerVarible这三种方式的集合,不区分是由哪种方式传递的参数
(5)ApplicationPath:获取服务器上ASP.NET虚拟应用程序的根目录路径
(6)ContertLength:指定客户端发送的内容长度
(7)Cookies:获取客户端发送的Cookie集合
(8)FilePath:获取当前请求的虚拟路径
(9)Files:获取采用多部分MIME格式的由客户端上载的文件集合
(10) Item:从Cookies, From, QueryString或ServerVariables集合中获取指定的对象
(11) Path:获取当前请求的虚拟路径
(12)Url:获取有关当前请求的URL信息
(13)UserHostName:获取远程客户端的DNS名称
(14)UserHostAddress:获取远程客户端的IP主机地址
(15)IsLocal:获取一个值,该值指示该请求是否来自本地计算机
(16)Browser:获取或设置有关正在请求的客户端浏览器功能信息
2.方法
(1) BinaryRead():执行对当前输入流进行制定字节数的二进制读取
(2)SaveAs():将HTTP请求保存到磁盘
(3) MapPath():将指定的路径映射到物理路径
二、Response对象
Response对象是HttpRespone类的一个实例。该类主要是封装来自ASP.NET操作的HTTP相应信息。Response对象将数据作为请求的结果从服务器发送到客户浏览器中,并提供有关响应的消息。它可用来在页面中输出数据,在页面中跳转,还可以传递各个页面的参数。
1.方法
(1)Redirect:将网页重新转到另一地址
(2) Write:写出指定字符串。
(3)AppendHeader:
语法格式
Response.AppendHeader(Name,Value)
参数Name为HTTP头,参数Value为HTTP头的值。
HTTP头是HTTP协议规定的请求和响应消息都支持的头域内容。HTTP头是页面通过HTTP协议访问页面时,最先响应的请求和响应消息,例如HTTP头中的Location,Location头用于将页面重定向到另一个页面,与Redirect方法相似。
(3)WriteFile 将文件输出到客户端
(4)Flush 将缓冲区的数据输出到客户端浏览器
(5)End 停止并结束ASP网页的处理
(6)Close 关闭客户端的联机
(7)ClearHeaders 清除缓冲区中的页面标题
(8)Clear 清除缓冲区的数据
(9)BinaryWrite 将二进制字符或字符串输出到客户端浏览器
(10)AppendToLog 将自定义的数据加入到IIS日志文件中(Log File),以便追踪与分析记录。
2.属性
(1)ContentType:输出流的内容类型比如html(text/html) 、普通文本(text/pain)还是JPEG图片(image/JPEG)。
(2)ContentEncoding:输出流的编码
(3)Cookies : 返回浏览器的cookies的集合
(4)Buffer : 设置缓冲信息, true | false .默认是true
(5)Expires : 获取或设置在浏览器上缓存的页过期之前的分钟数, 设置为0,则立刻过期
三、Page对象
每个aspx文件对应的一个page对象,.aspx页面与后台.cs代码类(局部类)合并生成页面类,Page对象是页面类的实例。所有的.aspx文件(Web窗体页)都继承自System.Web.UI.Page类
<%@ Page Language="C#" ---指明后台使用C#语言 AutoEventWireup="true" ---设置是否自动调用网页Load事件,默认是true CodeBehind="WebDemo1.aspx.cs"---其.aspx文件上绑定的后台代码文件 Inherits="ASP.NETDemo.Demo1.WebDemo1" ---后台代码类 %>
1.属性
(1) IsPostBack:该属性可以检查.aspx页是否为传递回服务器的页面,常用于判断页面是否为首次加载。
如果为true则为回发响应,如果为false则为首次加载
(2) IsValid:该属性用于判断页面中的所有输入的内容是否应经通过验证,它是一个布尔值的属性。当需要使用服务器端验证时,可以使用该属性。
(3) IsCrossPagePostBack:该属性判断页面是否使用跨页提交,它是一个布尔值的属性。
(4) Response属性和Request属性上面讲过了
2.事件
Page类常用的事件及执行的先后顺序:
(1) Page.PreInit 事件:在页初始化开始时发生
(2) Page.Init 事件:当服务器控件初始化时发生;初始化是控件生存期的第一步。 (继承自 Control。)
(3) Page.InitComplite事件:在页初始化完成时发生
(4) Page.PreLoad事件:在页 Load 事件之前发生
(5) Page.Load事件:当服务器控件加载到 Page 对象中时发生。 (继承自 Control )
(6) Page.LoadComplete 事件:在页生命周期的加载阶段结束时发生
(7) Page.PreRender事件 :在加载 Control 对象之后、呈现之前发生。 (继承自 Control。)
(8) Page.PreRenderComplete 事件:在呈现页内容之前发生
四、ViewState对象
视图状态,在 ASP .NET 中,当一个表单被提交时,表单会连同表单值一起出现在浏览器窗口中。如何做到的呢?这是因为 ASP .NET 维持了您的 ViewState。 ViewState 会在页面被提交到服务器时表明它的状态。这个状态是通过在带有 < form runat=“server”> 控件的每个页面上放置一个隐藏域定义的。
这个对象是ASP.NET中特有的对象,在其他语言的后端技术中没有这个对象
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack)//如果是第一次访问 { //先将Count的值设为0,并且保存在ViewState中 ViewState["count"] = 0; } } protected void btnAdd_Click(object sender, EventArgs e) { //每次点击按钮先取出ViewState中的值并且累加之后再次赋给ViewState ViewState["count"] = Convert.ToInt32(ViewState["count"]) + 1; Literal1.Text = ViewState["count"].ToString(); } }
使用ViewState实现页面信息的保存
保存数据
ViewState对象存储数据[键值对]Key=Value
取出数据
根据Key值取出Value值
总结
(1) ViewState中保存的数据全部被转换成object类型,取出时务必强制转换成特定类型
(2) ViewState只能在同一个页面的连续多次请求之间保存信息,页面跳转后信息就会丢失
ViewState的本质
ViewState的本质是一个隐藏域,和原始的.aspx文件中的多出来的标签一样,都是一个隐藏域,第一次创建ViewState对象其实是创建了一个隐藏域
五、Session对象
使用方式和ViewState相似
Session对象用于存储在多个页面调用之间特定用户的信息。Session对象只针对单一网站使用者,不同的客户端无法相互访问。Session对象中止联机机器离线时,也就是当网站使用者关掉浏览器或者超过设定Session对象的有效时间,Session对象变量就会关闭。
1.Session的原理
Session是服务器将客户端的数据代替客户端做出对应的保存,问题是不同用户在选择商品时,Session是如何区分不同用户的选择?
(1) 服务器根据SessionID来区分不同的用户,它是一个很长的字符串
(2)SessionID在用户第一次访问时由服务器产生并由用户浏览器保存
(3)用户每次的操作,浏览器在向服务器请求时都会带着自己的SessionID
Web服务器是如何判断用户是第一次请求并为其生成SessionID?
(1)用户第一次打开浏览器并登陆网页,浏览器中没有任何SessionID。
(2)用户把当前网站的网页全部关闭,再次登陆网页,前面的SessionID就会丢失
(3)用户使用不同浏览器登录网页,不同浏览器之间的Session无法共享。
2.属性
(1) SessionID:包含唯一的用户会话标识符
(2)Timeout:用户设置用户超时的时间,单位为分钟
3.方法
(1) Add(string name,object value):添加“键-值”对
(2)Remove(string name):根据键删除指定项
(3) Clear():从会话状态集合中移除所有的键值对
(4)Abandon():结束Session,取消当前会话
4.用途
(1)不用页面之间需要传递较为复杂的数据(对象)
(2)保存用户的登录信息,未登录者禁止访问相关页面
六、Cookie对象
Cookie对象一般用于在客户端保存一些针对某个用户的信息。
Cookie本质上只是一小段文本字符串,该字符串一般保存在用户计算机特定文件夹下的某个文件中,每个Cookie都保存到一个对应的文件中。它提供了在客户端存储用户特定信息的手段。例如保存用户登录某个网站的用户名、保存用户购物时选择的某些选项、保存是否已经投票以防止重复投票等。
当用户访问某个服务器时,如果服务器要求将Cookie信息也传递过来,则浏览器就会将其附加到HTTP头文件中发送给服务器。另外,服务器也可以通知浏览器将某个Cookie信息保存到计算机上,但是,一旦将Cookie保存在客户端计算机上,则只有创建该Cookie的网站才能读取它。
一般情况下,服务器都会给Cookie信息限制一个有效的时间段,当超过保存的有效期时,浏览器就会自动将其删除。如果没有设置Cookie的有效期,实际上只是将Cookie作为用户会话信息的一部分进行维护,当用户关闭浏览器时就会自动丢弃Cookie,而不会将其存储在用户的硬盘上。
不过,由于有些网站会利用这种技术随意在客户端保存访问信息,导致用户对其很反感,因此,有些用户可能会通过浏览器设置禁用Cookie,所以使用这种技术时,最好先检测是否可以在客户端存储Cookie。
1.Cookie的特点
(1) 存储少量不重要的数据
(2)存储在客户端的文本文件中(必须要设置有效期,否则不被存储)
(3)安全性差
(4)存储的数据类型-字符串
(5)浏览器窗口无关,但是与访问的站点有关
(6) 具体特定的过期时间和日期
(7) 在客户端存储后,将随着浏览器对相关网站页面请求而一并发送到服务器
2.Cookie的创建
Response.Cookies["User"].Value = TextBox1.Text;
HttpCookie cookie = new HttpCookie("User",TextBox1.Text); Response.Cookies.Add(cookie);
注意:创建Cookie使用Response对象,读取Cookie使用Request对象
string str=Request.Cookies["User"].Value;
3.属性
Response.Cookie.Keys:获取Cookie变量名或者根据其索引获取变量值
Response.Cookies.Count:获取Cookie变量的数量
Response.Cookies.AllKeys:将Cookies对象中所有的变量名存储到数组中。
4.方法
Response.Cookies.Set:用于更新Cookie的变量值
Response.Cookies.Remove:用于删除Cookie变量
Response.Cookies.Get:用Cookie变量名称或者索引值获取变量值。
Response.Cookies.Clear:清除Cookie内所有的变量
Response.Cookies.Add:用于Cookie对象中添加Cookie变量。
5.Cookies工作原理图
七、Application对象
1.作用
应用程序级别的数据保存(类似于在CS开发中在Winform或WPF中声明的全局变量,这个变量一般在程序开启的时候创建好了,在程序使用过程中一直存在,但是会跟着不同的程序功能存储的数据可能会发生变化)
相当于在BS服务器中存储的一个变量,只要服务器本次开启那么这个数据就被创建存储,只要服务器不关闭那么这个数据就一直存在,在所有客户端访问过程中都可以对这个对象存储的数据进行访问和更改
使用方式和Session一样采用“键值”对
的方式
2.特征
(1)位置:服务器内存,执行速度快
(2)使用范围:整个应用程序中
(3)类型:任意类型
(4)生命周期:应用程序开始创建到销毁
3.使用场合
例如统计这个站点的访问量,或者监控当前站点的访问人数
4.Global.asax文件
全局应用程序类:Global.asax,可以理解为Application对象主要在这个全局应用程序类中使用
(1) 处理应用程序级别的事件的可选文件
(2)必须放在应用程序的根目录下
常用事件 | 说明 |
---|---|
Application_Start | 接收第一个请求时触发 |
Application_End | 应用程序结束时触发 |
Session_Start | 某用户第一访问时触发 |
Session_End | 某用户退出应用程序时触发 |
public class Global : System.Web.HttpApplication { //1.服务器开启 protected void Application_Start(object sender, EventArgs e) { Application.Lock();//锁定访问 Application["Uservisit"] = 0;//网站的被访问的次数 Application["CurrentUsers"] = 0;//在线人数 Application.UnLock();//取消锁定 } //4.客户端首次访问 protected void Session_Start(object sender, EventArgs e) { Application.Lock(); Application["Uservisit"] = (int)Application["Uservisit"] + 1; Application["CurrentUsers"] = (int)Application["CurrentUsers"] + 1; Application.UnLock(); } //5.客户端退出访问结束会话 protected void Session_End(object sender, EventArgs e) { //在web.config文件中把SessionState模式设置为InPro时才会已发此事件 Application.Lock(); Application["CurrentUsers"] = (int)Application["CurrentUsers"] - 1; Application.UnLock(); } //2.服务器开始接收请求 protected void Application_BeginRequest(object sender, EventArgs e) { } //3.服务器开始处理请求 protected void Application_AuthenticateRequest(object sender, EventArgs e) { } //错误日志记录 protected void Application_Error(object sender, EventArgs e) { } //6.服务器结束 protected void Application_End(object sender, EventArgs e) { } }
5.Application工作原理图
八、Server对象
Server对象是HttpServerUtility的一个实例,它提供了对服务器上方法和属性访问,用于访问服务器上的资源。
1.属性
MarhineName:获取服务器的计算机名称
ScriptTimeout:获取和设置请求超时值
2.方法
Execute:在当前请求的上下文中执行指定资源的处理程序,然后将控制返回给处理程序
HtmlDecode:对已被编码以消除无效的HTML字符的字符串进行解码
HtmlEncode:对要在浏览器中显示的字符进行编码
MapPath:返回与web服务器上的指定虚拟路径相对应的物理文件路径
UrlDecode:对字符串进行解码,该字符串为了进行HTTP传输而编码并在URL中发送到服务器
UrlEncode:编码字符串,以便通过URL从Web服务器到客户端经行可靠的HTTP传输
Transfer:终止当前页的执行,并为当前请求开始执行新页
九、ASP.NET常用对象比较
| 对象名称 |
存储位置 | 有效时间 | 信息共享范围 |
---|---|---|
Request/Response | 请求和响应的过程中 | 请求结束之前 |
ViewState | 被请求的页面中 | 页面关闭之前 |
Session | Web服务器端 | 规定的时间内 |
Cookie | 客户端硬盘中 | 规定的时间内 |
Application | Web服务器端 | IIS重启之前 |
在VS上按F1
键,进入微软官方帮助文档,可查看其它更多内置对象
到此这篇关于不可或缺的ASP.NET内置对象小结的文章就介绍到这了,更多相关ASP.NET 内置对象内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!