第13章ASP.NET内置对象,应用程序配置和缓存Web应用程序在传统的意义上来说是无状态的,Web应用不能像WinForm那样维持客户端状态,所以在Web应用中,通常需要使用内置对象进行客户端状态的保存。这些内置对象能够为Web应用程序的开发提供设置,配置以及检索等功能。13.1ASP.NET内置对象在ASP的开发中,这些内置对象已经存在,这些内置对象包括Response、Request、Application等,虽然ASP是一个可以称得上是“过时的”技术,但是在ASP.NET开发人员中依旧可以使用这些对象。这些对象不仅能够获取页面传递的参数,某些对象还可以保存用户的信息,如Cookie、Session等。13.1.1Request传递请求对象Request对象是HttpRequest类的一个实例,Request对象用于读取客户端在Web请求期间发送的HTTP值。Request对象常用的属性如下所示。QueryString:获取HTTP查询字符串变量的集合。Path:获取当前请求的虚拟路径。UserHostAddress:获取远程客户端IP主机的地址。Browser:获取有关正在请求的客户端的浏览器功能的信息。1.QueryString:请求参数QueryString属性是用来获取HTTP查询字符串变量的集合,通过QueryString属性能够获取页面传递的参数。在超链接中,往往需要从一个页面跳转到另外一个页面,跳转的页面需要获取HTTP的值来进行相应的操作,例如新闻页面的news.aspx?id=1。为了获取传递过来的id的值,则可以使用Request的QueryString属性,示例代码如下所示。protectedvoidPage_Load(objectsender,EventArgse){if(!String.IsNullOrEmpty(Request.QueryString[id]))//如果传递的ID值不为空{Label1.Text=Request.QueryString[id];//将传递的值赋予标签中}else{Label1.Text=没有传递的值;//提示没有传递的值}if(!String.IsNullOrEmpty(Request.QueryString[type]))//如果传递的TYPE值不为空{Label2.Text=Request.QueryString[type];//获取传递的TYPE值}else343{Label2.Text=没有传递的值;//无值时进行相应的编码}}上述代码使用Request的QueryString属性来接受传递的HTTP的值,当通过访问页面路径为“”时,默认传递的参数为空,因为其路径中没有对参数的访问。而当访问的页面路径为“=1&type=QueryString&action=get”时,就可以从路径中看出该地址传递了三个参数,这三个参数和值分别为id=1、type=QueryString以及action=get。2.Path:获取路径通过使用Path的方法可以获取当前请求的虚拟路径,示例代码如下所示。Label3.Text=Request.Path.ToString();//获取请求路径当在应用程序开发中使用Request.Path.ToString()时,就能够获取当前正在被请求的文件的虚拟路径的值,当需要对相应的文件进行操作时,可以使用Request.Path的信息进行判断。3.UserHostAddress:获取IP记录通过使用UserHostAddress的方法,可以获取远程客户端IP主机的地址,示例代码如下所示。Label4.Text=Request.UserHostAddress;//获取客户端IP在客户端主机IP统计和判断中,可以使用Request.UserHostAddress进行IP统计和判断。在有些系统中,需要对来访的IP进行筛选,使用Request.UserHostAddress就能够轻松的判断用户IP并进行筛选操作。4.Browser:获取浏览器信息通过使用Browser的方法,可以判断正在浏览网站的客户端的浏览器的版本,以及浏览器的一些信息,示例代码如下所示。Label5.Text=Request.Browser.Type.ToString();//获取浏览器信息这些属性能够获取服务器和客户端的相应信息,也可以通过“?”号进行HTTP的值的传递和获取,上述代码运行结果如图13-1所示。图13-1Request对象Request不仅包括这些常用的属性,还包括其他属性,例如用于获取当前目录在服务器虚拟主机中的绝对路径(如ApplicationPath)。另外,开发人员也可是使用Request中的Form属性进行页面中窗体的值集合的获取。34413.1.2Response请求响应对象Response对象是HttpResponse类的一个实例。HttpResponse类用户封装页面操作的HTTP响应信息。Response对象的常用属性如下所示。BufferOutput:获取或设置一个值,该值指示是否缓冲输出,并在完成处理整个页面之后将其发送。Cache:获取Web页面的缓存策略。Charset:获取或设置输出流的HTTP字符集类型。IsClientConnected:获取一个值,通过该值指示客户端是否仍连接在服务器上。ContentEncoding:获取或设置输出流的HTTP字符集。TrySkipIisCustomErrors:获取或设置一个值,指定是否支持IIS7.0自定义错误输出。1.Response常用属性BufferOutput的默认属性为True。当页面被加载时,要输出到客户端的数据都暂时存储在服务器的缓冲期内并等待页面所有事件程序,以及所有的页面对象全部被浏览器解释完毕后,才将所有在缓冲区中的数据发送到客户端浏览器,示例代码如下所示。protectedvoidPage_Load(objectsender,EventArgse){Response.Write(缓冲区清除前..);//输出缓冲区清除}上述代码在cs文件中重写了Page_Load事件,该事件用于中向浏览器输出一行字符串“缓冲区清除前”。在ASPX页面中,可以为页面增加代码以判断缓冲区的执行时间,示例代码如下所示。bodyformid=form1runat=serverdiv%Response.Write(缓冲区被清除);%//输出字符串/div/form/body上述代码在页面中插入了一段代码,并输出字符串“缓冲区被清除”。在运行该页面时,数据已经存放在缓冲区中。然后IIS才开始读取HTML组件的部分,读取完毕后才将结果送至客户端浏览器,所以在运行结果中可以发现,“缓冲期清除前”是在“缓冲区被清除”字符串之前出现,如图13-2所示。图13-2BufferOutput因为BufferOutput属性默认为true,所以上述代码并无法看到明显的区别,当在浏览器输出前清除345缓冲区时,则可以看出区别。示例代码如下所示。Response.Write(缓冲区清除前..);Response.Clear();//清除缓冲区当使用Response的Clear方法时,缓冲区就被显式的清除了。在运行后,“缓冲区清除前”字符串被清除,并不会呈现给浏览器。当需要屏蔽Clear方法对缓冲区的数据清除,则可以指定BufferOutput的属性为False,示例代码如下所示。Response.BufferOutput=false;//设置缓冲区属性Response.Write(缓冲区清除前..);//设置清除前字符Response.Clear();//清除缓冲区使用上述代码将指定BufferOutput的属性为False,在运行时缓冲区数据不会被Clear方法清除。2.Response常用方法Response方法可以输出HTML流到客户端,其中包括发送信息到客户端和客户端URL重定向,不仅如此,Response还可以设置Cookie的值以保存客户端信息。Response的常用方法如下所示:Write:向客户端发送指定的HTTP流。End:停止页面的执行并输出相应的结果。Clear:清除页面缓冲区中的数据。Flush:将页面缓冲区中的数据立即显示。Redirect:客户端浏览器的URL地址重定向。在Response的常用方法中,Write方法是最常用的方法,Write能够向客户端发送指定的HTTP流,并呈现给客户端浏览器,示例代码如下所示。Response.Write(divstyle=\font-size:18px;\这是一串spanstyle=\color:red\HTML/span流/div);上述代码则会向浏览器输出一串HTML流并被浏览器解析,如图13-3所示。图13-3Response.Write方法当希望在Response对象运行时,能够中途进行停止时,则可以使用End方法对页面的执行过程进行停止,示例代码如下所示。for(inti=0;i100;i++)//循环100次{if(i10)//判断i10{Response.Write(当前输出了第+i+行hr/);//i10则输出i}else//否则停止输出{Response.End();//使用了End方法停止执行}}上述代码循环输出HTML流“当前输出了第X行”,当输出到10行时,则停止输出,如图13-4所示。346图13-4Response.End方法Redirect方法通常使用于页面跳转,示例代码如下所示。Response.Redirect();//页面跳转执行上述代码,将会跳转到相应的URL。13.1.3Application状态对象Application对象是HttpApplication类的实例,将在客户端第一期从某个特定的ASP.NET应用程序虚拟目录中请求任何URL资源时创建。对于Web应用上的每个ASP.NET应用程序都要创建一个单独的实例。然后通过内部Application对象公开对每个实例进行引用。1.Application对象的特性对于Application对象有如下特性:数据可以在Application对象之内进行数据共享,一个Application对象可以覆盖多个用户。Application对象可以用InternetServiceManager来设置而获得不同的属性。单独的Application对象可以隔离出来并运行在内存之中。可以停止一个Application对象而不会影响到其他Application对象。Application对象常用的属性有:AllKey:获取HttpApplicationState集合中的访问键。Count:获取HttpApplicationState集合中的对象数。其中Application对象的常用方法有:Add:新增一个Application对象变量。Clear:清除全部的Application对象变量。Get:通过索引关键字或变量名称得到变量的值。GetKey:通过索引关键字获取变量名称。347Lock:锁定全部的Application对象变量。UnLock:解锁全部的Application对象变量。Remove:使用变量名称移除一个Application对象变量。RemoveAll:移除所有的Application对象变量。Set:使用变量名更新一个Application对象变量。2.Application对象的使用通过使用Application对象的方法,能够对Application对象进行操作,使用Add方法能够创建Application对象,示例代码如下所示