ASPNET的内置对象.ppt
第4章 ASP.NET的内置对象,本章学习目标Page对象Response对象Request对象Server对象Application对象与Session对象,第4章 ASP.NET的内置对象,4.1 Page对象4.2 Response对象4.3 Request对象4.4 Server对象4.5 访问服务器端文件系统4.6 Application与Session对象,4.1 Page对象,Page对象对应于.aspx文件。ASP.NET网页(即.aspx)在执行时将自动生成Page对象,此对象无需特别指定名称,其保留名称为Page。Page对象的主要用途是:提供网页开始或已经下载后自动触发的事件,供程序设计者编写事件处理程序。提取浏览器提交的内容,或者输出信息给浏览器。设定是否保持Web Form中各控件最近的状态。进行与数据绑定有关的操作。,4.1 Page对象,4.1.1 Page对象的常用属性在编程实践中,经常用到的Page对象的属性如下:IsPostBack:获取布尔值。若IsPostBack的值为True,则表示当前网页是由于客户端返回数据而加载的。IsValid:获取布尔值。若IsValid的值为True,则意味着网页上的验证控件全部验证成功,否则表示至少有一个验证控件验证失败。EnableViewState:设置是否启用Web Form的状态保持功能,该属性的默认值为Ture。4.1.2 Page对象的常用事件在ASP.NET网页开始载入到被完全写入浏览器的过程中,产生的与Page对象有关的主要事件有Init、Load和UnLoad 3个。触发顺序如图所示。,4.1 Page对象,下面的例子展示了Init事件的特征。如果将产生3个单选按钮的代码块移入Load事件过程,则运行结果将如图所示。,4.2 Response对象,Response对象主要用于生成HTML内容并送交浏览器。4.2.1 Response对象的属性4.2.2 Response对象常用方法 4.2.3 Response对象典型应用举例,4.2.1 Response对象的属性,Response对象主要用于生成HTML内容并送交浏览器。在编程实践中,经常用到Response对象的下列属性:BufferOutput:给出或设置是否启用缓冲处理。当Response.BufferOutput为True时,服务器将先完成对所有Response的处理,然后才将结果发送至浏览器。Charset:给出或设置字符编码方式。ContextType:给出或设置输出的HTTP内容类型。默认为text/HTML,若要输出GIF图片,可设置为image/GIF。IsClientConnected:用于判断客户端是否仍然与服务器连接。,4.2.2 Response对象常用方法,在编程实践中,经常用到Response对象的下列方法:ClearContext():清除所有存放在缓冲区中尚未发送到客户端的输出。Close():关闭与客户端的连接。End():结束执行ASP.NET网页,然后将缓冲区中的所有输出发送到客户端。Flush():将缓冲区中的所有输出发送到客户端,然后清空缓冲区。Redirect(URL):将浏览器重定向到地址为URL的网页。WriteFile(filename):将指定的文件写入HTML文档。Write(字符串表达式):将字符串表达式写入HTML文档。,4.2.3 Response对象典型应用举例,1生成HTML文档内容在ASP网页中,利用Response对象将信息回送浏览器的代码是十分常见的。在ASP.NET网页中,同样可以利用这种方法将信息写入浏览器。下面是一个利用Response.Write()方法生成ASP.NET网页的例子,其运行结果如图所示。e:WebSite1ch04ASP.NET的内置对象Prac04-04.aspx,4.2.3 Response对象典型应用举例,2将特定文件的内容写入HTML文档当需要将大量信息写入浏览器时,可先将这些内容写入一个文本文件,然后再利用Response.WriteFile()方法实现写入。下面是一个将特定文件的内容写入HTML文档的例子,其运行结果如图所示。e:WebSite1ch04ASP.NET的内置对象Prac04-05.aspx,4.2.3 Response对象典型应用举例,3从当前网页转向其他网页当需要根据某个或某些条件转向特定的网页时,可使用Response对象的Redirect()方法。e:WebSite1ch04ASP.NET的内置对象Prac04-06.aspx在下面的例子中,包含了一个根据日序号的奇偶性转向不同网页的机制,其运行结果如图所示。4结束程序运行e:WebSite1ch04ASP.NET的内置对象Prac04-07.aspxResponse对象的End()用于结束程序运行。下面是一个利用该方法实现限时开放网站的例子,其运行结果如图所示。,4.2.3 Response对象典型应用举例,5在客户端磁盘中写入文件以存储某些信息可以利用Response对象将一些简单的信息以Cookie文件的形式存入客户端,以备使用。不同的客户端操作系统,Cookie文件的保存位置不同。当浏览器请求某一网页时,Cookie中的信息将被自动发往服务器端,服务器可提取Cookie中的信息。此外,需要指出的是,Cookie是基于服务器的,即A服务器不能读取由B服务器生成的Cookie。默认的情况下,Cookie只存在客户端与服务器会话的期间内;如果有需要的话,可以任意设置Cookie的生存期。如果浏览者禁止服务器将Cookie写入本地计算机,或者将已经存在于本地的Cookie删除,则基于Cookie的应用程序将可能不能正常运行。就Cookie容量而言,一般浏览器都将Cookie的大小限制为4098B。下面是一个利用Cookie将信息存入客户端的例子。,4.3 Request对象,基本上,可以将Request与Response视为一对对象。Request对象主要用于获取来自客户端的数据,如用户填入表单的数据、保存在客户端的Cookie等。在ASP网页中,Request最重要的用途是以Request(“表单域名称”)的格式获取用户在表单中输入的数据。在ASP.NET网页中,允许用户直接访问服务器控件的属性,因此,方式Request的使用日见减少。1获取地址、路径和文件名等信息下面的代码可提供客户端IP地址、服务器端当前文件的Url及路径等信息,其运行结果如图所示。e:WebSite1ch04ASP.NET的内置对象prac04-09.aspx,4.3 Request对象,2获取服务器端环境变量服务器端环境变量可提供服务器与客户端的许多重要参数。获取服务器端环境变量当前值如图所示。e:WebSite1ch04ASP.NET的内置对象prac04-10.aspx,4.3 Request对象,3获取客户端浏览器信息Request对象的Browser属性可以获取HttpBrowserCapabilities对象,该对象中包含有浏览器信息。e:WebSite1ch04ASP.NET的内置对象Prac04-11.aspx下面是一个利用Request.Browser获取浏览器信息的例子,其运行结果如图所示。,4.3 Request对象,4读取客户端Cookie文件前面已经提到过,可利用Response对象将一些简单的信息以Cookie文件的形式存入客户端。当服务器需要提取存放在客户端Cookie中的数据时,就必须使用Request对象。下面是一个利用Request对象读取Cookie信息的例子,其运行结果大致如图所示。,4.4 Server对象,Server对象所提供的是服务器方的基本属性和方法。4.4.1 Server对象的常用属性在编程实践中,经常用到的Server对象的属性如下:MachineName:获取服务器计算机名称。ScriptTimeOut:指定Script的超时时间。4.4.2 Server对象的常用方法在编程实践中,经常用到的Server对象的方法如下:HtmlEncode():对字符串进行HTML编码,以免该字符串被解释为HTML语法。HtmlDecode():HtmlEncode()方法的逆运算。UrlEncode():对字符串进行Url编码,将其转换为特殊的字符串。当Url中存在会使系统错误解读的字符时,应使此方法。UrlDecode():HtmlEncode()方法的逆运算。UrlPathEncode():只对Url字符串中的路径部分进行Url编码。MapPath():将虚拟路径转换为实际路径。Execute():执行另一个ASP.NET网页,执行完成后返回原来的网页继续执行。该方法提供了与函数调用类似的功能。Transfer():终止当前网页,执行新的网页(即实现重定向)。,4.4 Server对象,4.4.3 Server对象典型应用举例1调用指定的ASP.NET网页下面是一个利用Execute()方法调用ASP.NET网页的例子,其运行结果如图所示。e:WebSite1ch04ASP.NET的内置对象Prac04-13.aspx2重定向到其他网页在ASP.NET中,Response.Redirect()和Server.Transfer()都能实现网页重定向。这两个方法的区别在于:利用Response.Redirect(),可重定向到已存在的任何网页;而Server.Transfer()只能用于重定向到已存在的位于同一目录或同一目录之下的目录中的ASP.NET网页。利用Response.Redirect()完成重定向后,浏览器地址栏将显示新网页的URL,而利用Server.Transfer()完成重定向后,浏览器地址栏仍然显示旧网页的URL。利用Server.Transfer()完成重定向后,原网页中所有内置对象的值仍保留;而利用Response.Redirect()完成重定向后,原网页中所有内置对象的值将被改写。就重定向速度而言,Server.Transfer()优于Response.Direct()。,4.4 Server对象,下面是一个分别利用Response.Redirect()或Server.Transfer()两种方法实现重定向的例子,其运行结果如图所示。e:WebSite1ch04ASP.NET的内置对象Prac04-14.aspx3对字符串进行编码当需要在浏览器中显示HTML源码时,应对这些源码用Server.HtmlEncode()方法进行编码,以免浏览器解释其中的格式标记。一个展示Server.HtmlEncode()的用途的例子,其运行结果如图所示。,4.4 Server对象,当向服务器方发送URL参数时,如果数据中含有汉字或特殊字符(如“&”等),则应对URL参数进行编码,以免造成错误。下面是一个展示Server.UrlEncode()用途的例子,其运行结果如图所示。e:WebSite1ch04ASP.NET的内置对象Prac04-15.aspx4获取与虚拟路径或相对路径对应的实际路径在对服务器端的文件、文件夹及数据库进行操作时,有时必须给出其实际路径。因此,将虚拟路径转换为实际路径是一个十分实用的功能。下面是一个利用Server.MapPath()实现路径形式转换的例子,其运行结果如图所示。e:WebSite1ch04ASP.NET的内置对象Prac04-16.aspx,4.5 访问服务器端文件系统,ASP.NET允许用户全面访问位于服务器端的文件系统。通过编程,不仅可对文件系统的结构进行编辑,还可以建立新的文件,或更改已存在文件的内容,即在文件内容的层次上操作文件。在编程实践中,对文件系统结构进行的操作比较常用,而在文件内容的层次上操作文件则十分罕见。1访问服务器端目录信息2访问服务器端文件信息,4.5 访问服务器端文件系统,1访问服务器端目录信息用于对服务器端目录进行操作的常用方法如下:Directory.CreateDirectory(Path):按照参数Path给定的路径创建目录。Directory.Delete(Path,recursive):删除参数Path给出目录。Directory.Exists(Path):该方法返回一个布尔值,代表参数Path所指定的目录是否存在。Directory.GetCreationTime(Path):返回DateTime型数据,代表参数Path所指定的目录或文件的创建日期和时间。Directory.GetCurrentDirectory():返回值为字符串,给出ASP.NET程序所在的工作目录。Directory.GetDirectoryRoot(Path):给出参数Path所指定目录的根目录。Directory.GetFileSystemEntries(Path,searchPattern):返回值为字符串数组,给出参数Path所指定的目录中子目录及文件的完整路径及名称。Directory.GetDirectories(Path,searchPattern):返回值为字符串数组,给出参数Path所指定的目录中子目录的完整路径及目录名称。Directory.GetFiles(path,searchPattern):返回值为字符串数组,给出参数Path所指定的目录中文件的完整路径及文件名称。,4.5 访问服务器端文件系统,Directory.GetLogicalDrivers():获取计算机上的逻辑驱动器名称,返回值为字符串数组。Directory.GetLastAccessTime(path):给出参数path指定的目录或文件最后一次被访问的日期和时间,返回值为DataTime类型。Directory.GetLastWriteTime(path):获取参数path指定的目录或文件最后一次被写入的日期和时间,返回值为DataTime类型。Directory.Move(sourceDirNmae,destDirName):将参数sourceDirName指定的源目录或文件移动至参数destDirName指定的目标位置,移动后的目录名称或文件名称可以和源目录或源文件不同。只能在同一逻辑磁盘内移动目录或文件。Directory.SetCreationTime(path,creationTime):将参数path指定的目录或文件设置为新的创建日期creationTime。Directory.SetCurrentDirectory(path):将ASP.NET程序的工作目录设置为参数path给出的目录。Directory.SetLastAccessTime(path,lastAccessTime):将参数path指定的目录或文件设置为最后一次访问时间lastAccessTime。Directory.SetLastWriteTime(path,lastWriteTime):将参数path指定的目录夹或文件设置为最后一次写入时间lastWriteTime。,4.5 访问服务器端文件系统,下面是一个利用上述部分方法提取服务器端文件系统信息的例子,其运行结果如图所示。,4.5 访问服务器端文件系统,2访问服务器端文件信息用于对服务器端文件进行操作的常用方法如下:File.Copy(sourceFileName,destFileName,overwrite):复制由参数sourceFileName指定的文件,生成新文件,新文件的路径及名称为destFileName。File.Delete(path):删除由参数path指定的文件。File.Exists(path):该方法返回一个布尔值,代表参数path所指定的文件是否存在。File.GetAttributes(path):获取由参数path指定的文件或目录的属性。File.GetCreationTime(path):获取由参数path指定的文件或文件夹的创建时间,返回值为dataTime类型。File.GetLastAccessTime(path):获取由参数path指定的文件或文件夹最后一次被访问的日期和时间,返回值为DataTime类型。File.GetLastWriteTime(path):获取参数path指定的文件或文件夹最后一次被写入的日期和时间,返回值为DataTime类型。File.Move(sourceFilename,destFileName):将参数sourceFileName指定的源文件移动至参数destFileName指定的位置,移动后文件名称可以和源文件不同。,4.5 访问服务器端文件系统,File.SetCreationTime(path,creationTime):将由参数path指定的文件设置为创建时间creationTimeFile.SetLastAccessTime(path,lastAccessTime):将由参数path指定的文件设置为最后一次访问时间lastAccessTime。File.SetLastWriteTime(path,lastWriteTime):将由参数path指定的文件设置为最后一次写入时间lastWriteTime。ASP.NET访问服务器端文件信息的功能十分强大,下面是一个浏览特定目录下所有文件(包括子目录中的文件)信息的代码,其运行结果如图所示。,4.6 Application与Session对象,4.6.1 Application对象4.6.2 Session对象,4.6.1 Application对象,Web站点事实上是一个多用户的应用程序。可以把Application对象视为公共场所中的公告牌,任何一个用户写入其中的信息都可以被其他用户看到。从技术的层面上看,网站中所有的ASP.NET程序构成了一个Web应用系统。该系统的默认生命期,始于Web站点开始运行时,终于站点停止运行时(注意,Web应用系统被第一个浏览者激活后,其生存时间与有无浏览者在线并无直接关系)。在此期间,任何一个访问者都可以读取或改写Applicaton对象中的内容。第一个用户访问网站时,将触发Application对象的OnStart事件,而站点服务终止时,将触发Application对象的OnEnd事件。在ASP.NET中,上述两个事件的处理程序应放置在名为Global.asax中。该文件一般放在站点的主目录中。在Application对象的OnStart事件的处理程序中,通常用Add方法来添加Application变量。在Application对象的OnEnd事件的处理程序中,通常进行释放Application变量的操作。,4.6.1 Application对象,下面是一个利用Application对象实现访客计数器的例子,其运行结果如图所示。当网站正常运行时,上述网站计数器是可以正常工作的。但是一旦网站由于某种原因而重新启动,则网站计数器被自动清零。为了能在网站关闭期间保留计数器中已有数值,可考虑随时将计数值写入数据库或文本文件。在下面的程序中,放弃了使用Application变量,而是将计数值保存在一个文本文件中。该值可以被进入网站的任何一个用户改写,其运行结果如图所示。,4.6.2 Session对象,Session对象也是用于记录信息的。但与Application对象不同的是,Session对象为某一用户私有。这意味着,在线的用户A不能访问同时在线的用户B的Seesion对象。Session对象也有其生存期。在默认的情况下,如果浏览器在20分钟内没有再访问网站中的任何网页,则该网站为其建立的Session对象将自动释放。在编程实践中,Session对象通常用来在不同的ASP.NET网页间传递信息。4.6.2.1 Session对象的事件、重要属性和方法 1Session对象的事件当首次启动浏览器访问网站时,将触发Session对象的OnStart事件。2Session对象的重要属性Session对象的重要属性如下:IsNewSession,SessionID,TimeOut。3Session对象的重要方法Abandon()Clear()4.6.2.2 Session对象应用举例1Session.IsNewSession的应用程序Prac04-20.aspx、Prac04-21.aspx所实现的计数器都存在着能被用户“灌水”的漏洞。即用户连续刷新网页的操作,可使计数器的值迅速增加。可以利用Session对象的IsNewSession属性解决这个问题。需要指出的是,为使IsNewSession属性正常工作,应为网页所在的Web应用程序配置适当的Global.asax文件。,4.6.2 Session对象,上面的例子实现的计数器,虽然在技术上已经比较完美,但其运行结果的视觉效果尚不理想。通常网页计数器的数字应以比较美观、醒目的格式显示,换言之,需要将网页计数器中的数字显示为图片。下面是一个基于图片的网页计数器,其运行结果如图所示。,4.6.2 Session对象,2在网页中提供当前在线用户信息许多网页可以提供在线用户数量、各用户的某些个人信息等。这些功能可以用Session.SessionID来实现。因为Session.SessionID可以唯一标识每一个用户,因此,就可以通过编程,在Application对象中建立一个用户列表。对这个列表进行处理,就可以获得很多有趣、实用的功能。下面的程序实现的功能是:统计在线用户总数目,给出个用户的SessionID。其运行结果和程序流程图如图所示。通过上例可以知道,通过建立数组,可以在Application中存储与每个用户有关的任何信息,任何一个用户都可以改写存储在Application中的其他用户的数据,任何用户都可以读取存储在Application中的每个用户的信息。根据上述结论,对上例加以扩展即可实现一个网络聊天室。,