ASP.NET的几个对象
ASP中包含6个无需创建即可直接调用和访问的内置对象,即Request,Response,Session,Application,Server和Cookie。当web应用程序运行时,这些对象可以用来维护有关当前应用程序、HTTP请求、web服务器的活动状态等基本信息,并为用户的HTTP请求和web服务器的处理提供桥梁作用。而在ASP.NET对象中,这些对象仍然存在。不同的是,在.NET框架中,这些内部对象是由封装好的类来定义的,且已成为HttpContext类(封装了特定http请求的所有信息)的属性。由于ASP.NET在初始化页面请求时已经自动创建了这些内部对象,因此可以直接使用它们而无需再对类进行实例化。
一、Request对象
Request对象对应ASP.NET中的HttpRequest类,当客户端发出请求执行ASP.NET程序时,CLR会将客户端的请求信息包含在Request对象中,其中包括报头(Head)、客户端浏览器的信息(包括浏览器类型及浏览器版本号)、编码方式、请求方法(包括POST及GET),几所带参数信息(包括参数名及参数值)等。通过使用Request对象,我们可以访问HTML基于表单的数据和通过URL发送的参数列表信息,同时还可以接受来自客户端的Cookie信息。
Request对象的调用方法如下:
Request.Collection("Variable")
Collection是一个属性集合,包括QueySrting,Form,cookies和ServerVariables,表示获取数据的方法。其中,
当Request对象使用Form属性来获取窗体表单的数据时,一般是在窗体页面提交完成之后。窗体页面的提交方式有两种,即POST和GET。当使用POST提交方式时,窗体中的数据会作为Form集合的元素被发送到服务器端;当使用GET提交方式时,窗体中的表单数据将作为查询字符串的形式通过URL传递。此时,要得到其值,可使用Request对象的QueryString属性。
下面来看两个分别使用POST和GET提交数据的范例:
例一:用Form的POST方式发送数据
<html>
<head>
<title>使用POST方式发送数据</title>
</head>
<body>
<form id = "form1" method = "post" runat ="server">
<asp:label id = "label1" runat = "server" text="请提交数据"></asp:label>
<br />
<br />
您的姓名:
<asp:TextBox runat = "server" id = "name" text=""></asp:TextBox>
您的年龄:
<asp:TextBox runat = "server" id = "age" text =""></asp:TextBox>
<asp:button runat = "server" id = "button1"OnClick = "Button_Click" text ="提交"></asp:button>
</form>
</body>
</html>
<script runat = "server">
Sub Button_Click(s as object, e as eventargs)
Dim Str1 as String
Str1 = "您的姓名是:" & Request.Form("name")& "您的年龄是:" &Request.Form("age")
label1.text = Str1
End Sub
</script>
例二:用Form的GET方式发送数据
<html>
<head>
<title>使用GET方式发送数据</title>
</head>
<body>
<form id = "form1" method = "post" runat ="server">
<asp:label id = "label1" runat = "server" text="请提交数据"></asp:label>
<br />
<br />
您的姓名:
<asp:TextBox runat = "server" id = "name" text=""></asp:TextBox>
您的年龄:
<asp:TextBox runat = "server" id = "age" text=""></asp:TextBox>
<asp:button runat = "server" id = "button1"OnClick = "Button_Click" text ="提交"></asp:button>
</form>
</body>
</html>
<script runat = "server">
Sub Button_Click(s as object, e as eventargs)
Dim Str1 as String
Str1 = "您的姓名是:" & Request.QueryString("name")& "您的年龄是:" &Request.QueryString("age")
label1.text = Str1
End Sub
</script>
事实上,我们在使用QueryString属性时,也可以通过在请求URL中添加附加信息来传递数据,如:
/index.aspx?id=1234
"?"后面的数据便是附加信息。其中"id"表示变量名,"1234"表示该变量的值,获取id变量值的语句是Request.QueryString("id")。如果需要传递多个变量,则可用"&"符号链接,如:
/index.aspx?id=1234&userid=5678
使用QueryString和Form属性获取数据的区别在于,前者是一种显示传递,用户可以在地址栏中看到传递的参数及参数值;而后者是一种隐式传递,在传递过程中,用户是无法看到所传递的数据的。因此,使用Form属性来获取数据会更加安全。此外,由于URL得地址长度是有限的,因此使用QueryString属性来接受的数据也是有限的。一般来说,该方式仅能传递256个字节的数据,而通过Form属性来接收的数据最大值可达到2MB。
Request的ServerVariables属性包含了客户机和服务器的相关环境变量。
ServerVariables属性的常用环境变量
HTTP_USER_AGENT 用于获取用户浏览器的类型和版本号
REMOTE_ADDR 用于获取用户的IP地址
REQUEST_METHOD 用于获取用户提交数据的方法,如GET和POST
LOCAL_ADDR 用于获取服务器地址的IP地址
SERVER_NAME 用于获取服务器的主机名
PATH_INFO 用于获取但前执行程序的虚拟路径
PATH_TRANSLATED 用于获取当前执行程序的绝对路径
CONETNT_LENGTH 用于获取请求程序所发送内容的字符总数
CONTENT_TYPE 用于获取请求的信息类型
GATEWAY_INTERFACE 用于获取网管接口
QUERY_STRING 用于获取URL的附加信息
SCRIPT_NAME 用于获取当前程序的文件名(包含虚拟路径)
SERVER_PORT 用于获取服务器接受请求的端口
SERVER_PROTOCOL 用于获取服务器的协议和版本号
HTTP_ACCEPT_LANGUAGE
此外,Request还有一个cookie属性,该属性包含了Cookie对象。
二、Response对象
Response对象对应于ASP.NET中的HttpResponse类。当客户发出请求时,CLR会根据用户的请求建立一个Response对象。Response将用于回应客户浏览器。指示浏览器回应内容的包头、服务器端的状态信息,以及输出指定的内容等。
Response对象的相关属性和方法如下:
ContentType属性
Buffer属性
BufferOutPut属性 表示是否对页面进行缓冲输出,仅适用于ASP.NET
Clear属性
ClearContent属性 用于清除缓冲区的Response显示输出信息
ClearHeaders属性 用于清除缓冲区的头信息
Expires属性 用于设置页面在浏览器Cache中失效的时间长度,单位为分钟
ExpiresAbsolute属性 用于设置页面在浏览器Cache中失效的具体时间
Flush方法
Write方法 用于为当前页面输出指定文本
End方法 用于立即停止当前程序的处理并返回结果
BinaryWrite方法 用于将当前指定信息不进行任何字符转换直接写到当前的HTTP输出,此方法主要用来输出非字符的信息
WriteFile方法 用于将内容写到指定的文件中
Redirect 用于设置页面重定向
Response对象的Write方法可以说是我们用的最多的语句,它主要用来在页面上输出文本,如:
Response.Write("Hello, World!")
需要注意的是,在ASP中,Response对象的write方法可以直接写输出文本,不需要些括号,如:Response.Write"Hello,World!",而在ASP.NET中,括号是必须要的,这也是ASP开发人员在学习ASP.NET时最容易犯错误的地方。
此外,我们还可以将Response.Write语句放在脚本内的函数或方法中使用。例如,下面的范例在VB脚本中定义了一个方法,调用Response.Write方法来输出字符串参数。
例:
<script language = "vb" runat ="server">
Sub PrintText(ByVal Str As String)
response.write("下面是输出的文本:")
response.write(Str)
End Sub
</script>
<%PrintText(Now.ToString)%>
在程序设计时,通常需要在不同的页面之间跳转,从而满足不同业务的流程需要,此时,我们可以使用Response.Write方法来实现页面的跳转功能,如
Response.Redirect("Login.apsx")
值得注意的是,使用Redirect方法将会消耗大量的服务器CPU时间。因此,如果不是特别需要的话,最好不要不加限制的使用它。
ASP.NET提供了缓冲机制,允许将数据首先保存在服务器的缓冲区域。这样就不用每次访问时都重新执行文件,而只从缓存中取出即可,从而加快页面处理的速度和服务器的响应时间。Response对象可以通过Buffer和BufferOutPut属性来设置是否缓冲要输出到客户端的数据,如:
Response.BufferOutPut = "true"
上面的数据设置了缓冲数据为真,这意味着完成对整个页面的处理之后才向客户端输出。Buffer和BufferOutPut实现的功能是一样的,提供Buffer属性仅仅是为了与ASP兼容,而通常在ASP.NET中使用的是BufferOutPut属性。
此外,ASP.NET还提供了两个方法,即Clear和Flush来处理有关缓冲的内容,使用这两个方法的前提条件是BufferOutPut属性或Buffer属性已经被设置为True。其中Clear方法用于清除缓冲区中的所有HTML输出,Flush方法用于将当前缓冲区的内容强制输出到客户端。
与Request对象一样,在Response对象中也包含了一个cookies集合,该集合包含一些cookie对象。该对象是在服务器上创建的,并以Set-Cookie表头的形式传送到客户端。
三、Server对象
Server对象对应于ASP.NET中的HttpServerUtility类,它允许方法服务器本身,获取有关服务器的相关信息。
Server对象的常用属性和方法如下:
MachineName属性 用于获取服务器的计算机名称
ScriptTime属性 用于设置或获取请求服务器的超时时间,单位为秒
CreateObject方法 用于创建COM对象的一个服务器实例
Execute方法 用于使用另一页面来执行当前请求
Transfer方法 用于终止当前页的执行,并开始执行当前请求
HtmlDecode方法 用于对要显示在浏览器中的字符进行解码
HtmlEncode方法 用于对要显示在浏览器中的字符进行编码
UrlDecode方法 对字符串进行解码,该字符串为了HTTP传输而编码并在URL中发送到服务器
UrlEncode方法 用于编码字符串,以便通过URL从web服务器到客户端执行可靠的HTTP传输
UrlPathEncode方法 对URL字符串的路径执行URL编码,返回该编码字符串
MapPath方法 返回与web服务区上的虚拟目录对应的物理路径
ToString方法 以字符串的形式返回对象的信息
HtmlEncode是Server对象中用得较多的一个方法,它用于对显示在浏览器中的字符串进行编码。首先看下面这条语句:
Response.Write("<center><b>ASP.NET</b></center>")
其作用是在浏览器中局中并加粗显示“ASP.NET”。但是如果我们需要将“<center><b>ASP.NET</b></center>”作为一个完整的字符串显示在浏览器中,则通过HtmlEncode方法可以轻松的实现,如:
Response.Write("Server.HtmlEncode(<center><b>ASP.NET</b></center>)")
事实上,经过HtmlEncode编码后,字符串已经转换为:
<center&rt;<b&rt;ASP.NET</b&rt;</center&rt;
HtmlDecode方法的作用与HtmlEncode方法的作用相反,它将HTML编码的代码进行解码,恢复代码的本来面目。
四、Application对象
Application对象对应于ASP.NET中的HttpApplicationState类,它主要用来在整个应用程序中共享信息。Application对象可以直接在应用程序状态中存储变量和对象,这些变量和对象在整个应用程序执行的所有ASP.NET页面中都是可用的,其值也相同。例如,我们用的最多的保存页面的访问计数即可通过Application对象实现。
Application对象的相关属性和方法如下:
Allkeys属性 获取应用程序状态集合中的对象键
Contents属性 获取应用程序状态集合的对象引用
Count属性 获取所含对象的总数
StaticObjects属性 获取以<boject>标记的且其范围设置为Application的所有对象
Add方法 添加一个对象到应用程序状态集合中
Lock方法 锁定应用程序状态对象以保证并发访问
UnLock方法 取消锁定
Clear方法 从应用程序状态集合中移除所有对象
Remove方法 从应用程序状态集合中移除指定对象
RemoveAll方法 从应用程序状态集合中移除所有对象
例如,下面的语句在应用程序状态内创建一个新的变量,其名称为“AppVarName”,值为“VarValue”:
Application("AppvarNAame") = "VarValue"
在一个ASP.NET页面执行这个语句后,在同一个应用程序的其他页面都可以直接获取AppVarName的值。要读取应用程序状态变量的值,可以使用如下语句:
Response.Write(Application("AppVarName"))
它在页面上显示应用程序状态变量的值。
当然,我们也可以将一个对象保存在应用程序状态变量中。例如,讲一个DataTable对象添加到应用程序状态中,如下所示:
Application("DataTable") = dtbDataTable
实际上,应用程序状态变量可以说是ASP.NET应用程序的全局变量,它一直保存到应用程序被关闭或者现实的删除此变量时。因此,在应用程序状态中添加复杂对象时,要考虑到应用程序的内存开销。
要从应用程序状态中移除特定的变量,可使用Remove方法。例如:
Application.Remove("AppVarName")
执行此语句后,应用程序状态中将不再存在AppVarName变量。
若要移除应用程序状态中所有变量。可使用Clear或者RemoveAll方法。例如:
Application.Removeall()
或者
Application.Clear()
五、Session对象
Session对象对应于HttpSessionState类,它主要用于保存与当前用户会话相关的信息。与Application对象不同的是,Session对象与用户相关联。对于同一个用户,在应用程序内不同的页面访问同一个Session变量,其值相同;而不同的用户拥有不同的Session变量,其内容不同。对于每一个Session对象,都有一个SessionID来唯一标识它。
Session对象的相关属性和方法如下:
SessionID属性 用于表示会话的标识ID
Count属性 当前会话状态包含的项数
Mode属性 获取当前会话的模式
TimeOut属性 会话状态的过期时间,以分钟为单位
Abandon属性 取消当前会话
Clear方法 清除当前会话中的所有值
RemoveAll方法 清除当前会话中的所有值
Remove方法 清除当前会话中的指定值
六、Cookie对象
Cookie对象对应于HttpCookie类,它主要用来在用户的浏览器上存储小块儿的信息,同时也可用来处理与当前用户会话有关的信息。
Cookie对象的相关属性和方法如下:
Name属性 用于获取Cookie的名字
Value属性 用于设置或获取Cookie的值
Domain属性 用于设置或获取与Cookie相关的域,默认为接收到该Cookie的主机
Expires属性 用于设置或获取Cookie的过期时间
Values属性 用于获取字典Cookie的键值
HasKeys属性 用于判断是否包含键,即是否为字典Cookie
Path属性 用于获取或设置与当前Cookie一起传输的虚拟路径,通常保留其默认值
Secure属性 表示Cookie是否通过保密传输,默认为False
Cookie对象可以分为两种类型,即会话Cookie(SessionCookie)和持久性Cookie,前者是临时的Cookie,一旦会话状态结束便会自动的消失;后者则具有确定的过期时间。一般来说,持久性Cookie在用户的计算机上都是以文本文件的形似存储的。
为创建一个Cookie,首先要初始化一个HttpCookie对象实例,然后将其添加到Response的Cookie集合中,例如:
Dim objCookie As New HttpCookie("TestCookie","会话Cookie")
Response.Cookikes.Add(objCookie)
这里添加的是一个会话Cookie,它被添加到浏览器的会话内存中,但不会被写入到用户的硬盘文件中。一旦用户关闭浏览器,该Cookie对象便会消失。
如果要创建一个持久性Cookie,则只需在创建时为其指定一个过期时间即可。这样它就会以文本文件的形式保存到用户的计算机中,直到到达指定的时间。例如:
Dim objCookie As New HttpCookie("TestCookie","会话Cookie")
objCookie.Expires = "#10/1/2012#"
Response.Cookikes.Add(objCookie)
如果需要获取一个Cookie值,则可访问Request对象的Cookie集合,例如,以下将遍历并显示当前Request对象中的所有Cookie:
Dim CookieName As String
For Each CookieName In Request.Cookies
Response.Write("Cookie名称:" & CookieName& ",Cookie内容:" &Request.Cookies(CookieName).Value) &"<br />"
值得注意的是,Cookie只能保存字符串信息,当保存的是整数值时,应先将其转换为字符串。