版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章ASP.NET基本语法与常用内置对象在利用ASP.NET实际编写代码时,需要了解一下ASP.NET语法规则,以便使我们编写的代码符合ASP.NET规范。同时,在编写代码时,可以使用ASP.NET为我们提供的内置对象。本章要点:ASP.NET语法规则Request对象的使用Response对象的使用Server对象的使用Application对象的使用Session对象的使用Cookie的使用5.1ASP.NET基本语法5.1.1代码声明块动手做:代码声明块用于定义在Web页中使用的变量、字段、方法、属性和事件处理程序等,是实现动态网页的重要组成部分。代码声明块的语法形式为:<SCRIPTLanguage="代码语言"Src="文件名"Runat="Server">
代码块</SCRIPT>
代码声明块的属性:Runat="Server":通知Web服务器在服务器上处理代码块。若不设置该属性,代码块将由客户端浏览器处理。Language="代码语言":指名使用哪一种程序设计语言来编写代码块。代码语言可以是VisualBasic.NET(简写为VB)、VisualC#.NET(简写为C#)、JScript.NET。如果不指名该属性,则默认的代码语言为VisualBasic.NET。Src="文件名":指定要加载的脚本文件的路径和文件名。当使用该属性时,将忽略代码块中的任何内容。代码块:为用指定的编程语言编写的代码。注意:在ASP.NET页或用户控件中只能使用一种语言。如果在多处(如代码声明块的开始标记和@Page或@Control指令中)指定了语言,则这些语言必须相同。在ASP.NET页中,可以包含任意数量的代码声明块。在代码声明块中,程序设计语句必须出现在方法体、类体或事件处理程序中。动手做:[例5-1](5-1.aspx)使用代码声明块:<HTML><TITLE>[例5-1]使用代码声明块</TITLE><SCRIPTLanguage="VB"RUNAT="SERVER"> SubtName_Change(SenderAsObject,EAsEventArgs)
lDisplay.Text="嗨!我知道您的名字是-"+tName.Text EndSub</SCRIPT><BODY> <%="请留下您的大名:"%> <Formrunat="server"> <asp:textboxid="tName"OnTextChanged="tName_Change"runat=server/> <asp:buttonid="bSubmit"Text="确认"runat=server/><p> <asp:labelid="lDisplay"forecolor="Blue"font-size="20pt"runat=server/> </Form></BODY></HTML>点评: 本实例的代码声明块声明ASP.NET的TextboxWeb服务器控件的事件响应程序SubtName_Change(SenderAsObject,EAsEventArgs)。在此事件响应程序中,通过Web服务器控件tName提交的文本,应用程序获取用户输入的名字。然后在静态文本标签lDisplay上显示出用户输入的名字。图5-1运行结果5.1.2代码呈现块用于定义在Web页中要执行的内联代码或内联表达式。它有两种表达形式:内联代码和内联表达式。 内联代码的语法形式为:
<%内联代码%>
其中,内联代码可以是独立的代码块,也可以是控制流块。 内联表达式的语法形式为:
<%=内联表达式%>
内联表达式是HttpResponse.Write
方法的快捷方式,用于向浏览器输出信息。注意: 在<%%>标记或<%=%>标记中,只允许内联代码和内联表达式,不能在此标记中定义方法和编写事件处理程序。5.1.2代码呈现块[例5-2](5-2.aspx)使用内联代码<%@PAGELANGUAGE="VB"%><% DimiAsInteger Fori=0To9
Response.Write(i) Ifimod2=0Then
Response.Write("<BR>") EndIf Next%><HTML> <TITLE>[例5-2]使用内联代码</TITLE></HTML>动手做:程序执行结果如图5-2所示:点评:程序中使用内联代码输出0-9共10个数字,遇到偶数数字则折行显示。[例5-3](5-3.aspx)使用内联表达式<%@PAGELANGUAGE="VB"%><% DimiAsInteger Fori=0To9%><%=i%><%Ifimod2=0Then%><BR><% EndIf Next%><HTML> <TITLE>[例5-3]使用内联表达式</TITLE></HTML>动手做:程序中使用内联表达式<%=i%>
在浏览器中显示0-9共10个数字。
程序运行结果如图5-3所示。5.1.3服务器端注释用于为代码添加注释。一段编写规范的代码应该加上适当的注释,以便增加可读性。服务器端注释语法形式为:<%--注释块--%>位于<%----%>其中的代码不会被服务器处理,因此不会在浏览器中显示出来。例如,<%--<%Response.Write("HelloWorld");%>--%>在浏览器中,并不显示任何内容,因为Response.Write("HelloWorld")语句被注释了。它用于将指定文件的内容插入ASP.NET页或用户控件中。服务器端包括指令语法形式为:
<!--#IncludeFile|Virtual=“文件名”-->服务器端包括指令的属性:“文件名”:表示所包含文件的路径和文件名。File:表示“文件名”属性必须使用Web站点的物理路径来表达。Virtual:表示“文件名”属性必须使用Web站点的虚拟路径来表达。注意: 由于文件的物理路径有可能会更改,因此推荐使用虚拟路径的方法。5.1.4服务器端包括指令[例5-4](5-4.aspx)使用服务器端包括指令]<HTML> <TITLE>[例5-4]使用服务器端包括指令</TITLE><body> <!--#Includevirtual="include\bar.inc"-->
欢迎使用ASP.NET!</body></HTML>Bar.inc文件的内容:<IMGsrc="include\bar.jpg"><BR>动手做:程序运行结果如图5-4所示: 程序中,使用虚拟路径把“bar.inc”文件包含进来,作为该网页的页眉。该虚拟路径是5-4.aspx文件所在的文件夹的下一级文件夹include。使用服务器端包含指令的好处是当在站点中许多网页都使用该页眉(或导航栏),而你需要改动该页眉(或导航栏)时,可以不必一一改动所有网页,只需要改动包含文件即可。点评:5.1.5指令语法指定当编译器处理ASP.NETWeb窗体页(.aspx)和用户控件(.ascx)文件时所使用的设置。常见的指令见表5-1。
指令说明@Page设置Web页的特定属性@Control设置组件的特定属性@Import导入命名空间,以便在页中可以使用命名空间中的所有类和接口。@Implement指示页或用户组件实现指定的.NET框架接口@Register将别名与命名空间及类名关联起来,从而允许用户组件和自定义服务器组件在被包括到请求的页或用户控件时呈现@Assembly将程序集链接到当前页或用户组件@OutputCache设置页或用户组件的输出缓存@Reference将页或用户组件链接到当前页或用户组件@Page指令Page指令由属性值对组成,其语法形式为:<%@Page属性=值[属性=值…]%>Page指令的属性:Language :用于设置在<%%>标记中使用的脚本语言,可以使用VB作为脚本语言CodeBehind:用于指定Web窗体的类文件名Inherits:用于指定该Web页是从哪个类文件中继承而来的EnableSessionState:定义页的会话状态要求,如果启用会话状态,则为true,如果可以读取但不能更改会话状态,则为ReadOnly,否则为false,默认为trueEnableViewState:指示是否为所有页请求维护视图状态,如果维护视图状态,则为true,否则为false,默认值为trueContentType:将响应的HTTP内容类型定义为标准的MIME类型Buffer:确定是否启用HTTP响应缓冲,如果启用页缓冲,则为true,否则为false,默认值为trueClassName:指定在请求时将自动进行动态编译的页的类名。下面就详细介绍几个常用的指令:@Control指令它的语法形式为:<%@Control属性=值[属性=值…]%>@Control指令的属性基本与@Page指令相同,这里就不赘述。该指令只能用于.ascx文件中,每个.ascx
文件只能包含一条@
Control指令。@Import指令它的语法形式为:<%@ImportNameSpace=“值”%>@Import指令所具有的NameSpace
属性不能多于一个。要导入多个命名空间,请使用多条@Import指令。例如:<%@ImportNameSpace=“System.Data”%><%@ImportNameSpace=“System.Data.SqlClient”%>导入System.Data
和System.Data.SqlClient命名空间。在ASP.NET中,有五个常用内置对象,它们是Request对象、Response对象、Server对象、Application对象和Session对象。这些对象用来维护有关当前应用程序、每个用户会话、当前HTTP请求、请求的Web窗体页等信息,主要用于与用户的交互。因此,他们在ASP.NET应用程序扮演非常重要的角色。另外,Cookie也是一个比较有用的对象,我们在此一并予以介绍。下面我们就分别介绍这些内置对象。5.2ASP.NET内置对象5.2.1Request对象Request对象代表由客户程序发往服务器的HTTP请求报文,即由浏览器发送到服务器的所有信息,如Cookie数据、客户端浏览器类型和功能、MIME内容类型、客户端用GET或POST方法传递的查询字符串等。使用Request对象可以获取用户在浏览器中输入的信息,通过用户提供的这些信息,服务端的Web应用程序就可以确定如何响应用户的请求,从而实现输出动态网页的目的。Request一般通过集合的方式来表达用户数据,即可以使用如下形式:Request.Collection(“集合中的项”)访问集合中的数据。其中,Collection是指QueryString、Form、Cookies或ServerVariables集合。1.QueryString集合当用户把要提交的信息附加在URL的后面作为查询字符串提交,即HTML表单使用GET方法向服务器提交数据时,我们可以通过检索Request对象的QueryString集合获取这些数据。动手做[例5-5](5-5.aspx)判断用户所输入的数字是奇数还是偶数<%@Pagelanguage="VB"%><HTML><TITLE>[例5-5]判断所输入的数字是奇数还是偶数</TITLE><% DimnumasInteger=Request.QueryString("TextBox1") ifnummod2=0then
lDisplay.Text=num&"是"&"偶数" else
lDisplay.Text=num&"是"&"奇数"endif%><BODY> <FORMid="Form1"method="GET"runat="server"> <asp:Labelid="Label1"runat="server">请输入数字:</asp:Label> <asp:TextBoxid="TextBox1"runat="server"/> <asp:Buttonid="Button1"Text="提交"runat="server"/><P> <asp:Labelid="lDisplay"runat="server"/> </FORM></BODY></HTML>点评:用户在文本框中输入的数字发送到服务器后,应用程序通过Request.QueryString("TextBox1")语句获得输入的数字,然后通过nummod2=0语句判断是否是偶数。最后把判断结果输出到lDisplay标签中。运行结果如图5-5所示:
2.Form集合当使用POST方法将HTML表单提交给服务器时,表单元素的值可以使用Request对象的Form集合来检索。与GET方法比较,使用POST方法可以将大量数据发送到服务器端。动手做[例5-6](5-6.aspx)求两个数的和<%@Pagelanguage="VB"%><HTML><TITLE>[例5-6]求两个数的和</TITLE><% Dimnum1asInteger=Request.Form("TextBox1") Dimnum2asInteger=Request.Form("TextBox2")
lDisplay.Text=num1&"+"&num2&"="&num1+num2
%><BODY><FORMid="Form1"method="POST"runat="server"> <asp:TextBoxid="TextBox1"runat="server"/>+ <asp:TextBoxid="TextBox2"runat="server"/> <asp:Buttonid="Button1"Text="提交"runat="server"/><P> <asp:Labelid="lDisplay"runat="server"/></FORM></BODY></HTML>点评:
该段代码利用Request.Form("TextBox1")语句和Request.Form("TextBox2")语句获得用户输入的两个数,然后把两个数的和输出到静态文本标签lDisplay中。运行结果如图5-6所示
3.ServerVariables集合ServerVariables集合用于获取Web服务器环境变量的值,这些环境变量包括发出请求的浏览器类型、发送请求的IP地址、发送请求的端口号、发送请求的HTTP方法、服务器的主机名、接受请求的端口值等信息。这些信息都有相应的环境变量名与之对应,使用时只需要把环境变量名带入下式中即可:Request.ServerVariables(“环境变量名”)由于ServerVariables集合含有请求客户的各种信息,因此充分利用这些信息就可以使服务器端对不同的客户端智能地做出反应。表5-2是一些常见的环境变量:环境变量名含义ALL_HTTP还没被解析的HTTP头CONTENT_LENGTH从客户端收到的字节数PATH_INFO客户端给出的路径信息,包括URL和查询字符串PATH_TRANSLATED与PATH_INFO相同,只不过把虚拟路径转为物理路径QUERY_STRINGURL后的查询字符串信息REMOTE_ADDR客户端的IP地址REMOTE_HOST客户端的主机名REMOTE_USER被服务器验证过的客户用户名REQUEST_METHODHTTP请求方式SCRIPT_NAME被执行的脚本程序名SERVER_NAME服务器的主机名(或IP地址)SERVER_PORT接受请求的TCP/IP端口URL不包含查询字符串的URL部分动手做[例5-7](5-7.aspx)获取服务器环境变量<%@Pagelanguage="VB"%><HTML> <TITLE>[例5-7]获取服务器环境变量</TITLE><% Dimi,jAsInteger Dimkey(),value()AsString DimnamevalueAsNameValueCollection
namevalue=Request.ServerVariables
key=namevalue.AllKeys
Fori=0Tokey.GetUpperBound(0)
Response.Write("环境变量:"&key(i)&"<br>") value=namevalue.GetValues(j) Forj=0Tovalue.GetUpperBound(0)
Response.Write("值:"&CStr(j)&":"&value(j)&"<br>") Nextj
Response.Write("<HR>") Nexti%><BODY></BODY></HTML>点评:该段代码通过NameValueCollection类来获取服务器所有环境变量。该对象中使用值对的方式存储环境变量名和环境变量的值,使用AllKeys属性可以获取所有环境变量名,使用GetValues方法可以获取环境变量的值。运行结果如图5-7所示:5.2.2Response对象它主要用于把服务器生成的结果在客户端浏览器中显示出来。它与Request对象正好相反。除了发送信息给浏览器以外,它还能够完成重定向浏览器到另一个URL或设置cookie的值。下面我们就介绍Response对象常见的一些属性和方法。1.Write方法Write方法是Response的一个主要的方法,它可以将指定的字符串输出到客户端浏览器,也可以把HTML标记输出到客户端浏览器。另外,前面我们所讲的内联表达式<%=data%>是Write方法的简便实现。动手做[例5-8](5-8.aspx)使用Write方法输出一个无序列表<%@Pagelanguage="VB"%><HTML> <TITLE>[例5-8]使用Write方法输出一个无序列表</TITLE><%
Response.Write(" ASP.NET可以使用的编程语言:")
Response.Write("<UL>")
Response.Write("<LI>VisualBasic.NET")
Response.Write("<LI>VisualC#.NET")
Response.Write("<LI>JScript.NET")
Response.Write("</UL>")
%><BODY></BODY></HTML>运行结果如图5-8所示:Redirect方法
Redirect方法使浏览器重定向到另外的URL上,即跳转到另外一个网页。这也是一个经常使用的方法,通过该方法可以使服务器对不同客户的请求提供不同的页面。动手做[例5-9](5-9.aspx)使用Redirect方法重定向到另外的URL<%@Pagelanguage="VB"%><HTML> <TITLE>[例5-9]使用Redirect方法重定向到另外的URL</TITLE><% DimnumAsInteger=Request.Form("tNumber") SelectCasenum case1Response.Redirect("5-1.aspx")case2Response.Redirect("5-2.aspx")case3Response.Redirect("5-3.aspx")CaseElse
Response.Write("<FONTSIZE=6COLOR=BLUE>暂时只提供3个实例,以后还会提供更多的实例</FONT>") EndSelect %><BODY><formrunat="server">
请输入实例号,以显示该实例运行结果。
<asp:textboxid="tNumber"runat=server/><asp:buttonid="bSubmit"Text="确认"runat=server/><p></form></BODY></HTML>点评:如果用户输入1,则会重定向到5-1.aspx页面上;如果用户输入2,则会重定向到5-2.aspx页面上;如果用户输入3,则会重定向到5-3.aspx页面上;如果用户输入3以上数字,则会在页面上显示“暂时只提供3个实例,以后还会提供更多的实例”。程序运行结果如图5-9所示:3.Clear方法、End方法、Flush方法当Response对象的Buffer属性被设置为True时,可以使用Clear方法清除缓存中的所有HTML。End方法使Web服务器停止处理脚本并返回当前结果。文件中剩余的内容将不被处理。如果存在缓存,则End方法会把缓存中的内容发送给客户并清除缓存中的内容。如果Response对象的Buffer属性为True,则Flush方法立即把缓冲区中的内容发送给客户端。4.BufferOutput属性
BufferOutput
属性指示是否缓冲输出,并在完成处理整个响应之后将其发送。使用缓冲意味着发给客户端的信息先要存放在一个预先设定的缓冲区中,然后再一次性地发给客户端。如果BufferOutput属性设为True,则缓冲页。当缓冲页时,只有当前页的所有服务器脚本处理完毕或者调用了Flush或End方法后,服务器才将响应发送给客户端浏览器。动手做[例5-10](5-10.aspx)不使用缓存<%@Pagelanguage="VB"%><HTML><TITLE>[例5-10]不使用缓存</TITLE><% DimiAsInteger
Response.BufferOutput=False fori=0to6
Response.write(i&"<BR>") nexti
Response.Clear()
Response.Write("使用For循环输出0-9")%><BODY></BODY></HTML>点评:我们看到当BufferOutput属性设为False时,页面并不缓冲。所有内容一次发给客户端,即使使用Clear方法也不能改变输出。程序运行结果如图5-10所示。动手做[例5-11](5-11.aspx)使用缓存<%@Pagelanguage="VB"%><HTML> <TITLE>[例5-11]使用缓存</TITLE><% DimiAsInteger fori=0to6
Response.write(i&"<BR>") nexti
Response.Clear()
Response.Write("使用For循环输出0-9")%><BODY></BODY></HTML>点评:当不设置BufferOutput属性时,表示使用BufferOutput的默认值,即True。当使用缓冲时,Clear方法会把之前的所有输出清除,而之后的输出仍然有效。程序运行结果如图5-11所示Expires属性Expires属性用于指定缓存页的过期时间。如果用户在缓存页过期之前又返回到此页,则会从缓存区中取出该页显示,而不是从服务器端获得该页。如果要和用户动态交互,最好把Expires设为0,这样可以取消缓存,每次访问都是从服务器端获得页面。
5.2.3Server对象Server对象可以访问服务器上的方法和属性,如在服务器上创建和启动组件实例、对HTML和URL进行编码、把相对或虚拟路径映射到服务器上相应的物理目录上等。下面就介绍其常用属性和方法。1.MachineName
用于获取服务器的机器名。例如:
DimnameAsString name=Server.MachineName2.ScriptTimeout属性用于获取和设置页面超时值,超时值的单位为秒,默认值为90秒。所谓页面超时值是指页面运行的最长时间,页面运行超过这一时间之后即被强行结束。例如,以下代码指定页面超时值为120秒。
Server.ScriptTimeout=120页面超时值的设定并没有一个确定的标准,一般都是一个估计值。注意:如果想设置超时值的话,必须要设置大于90秒的值。3.CreateObject方法用于创建COM对象的一个服务器实例。通过该方法我们可以在ASP.NET应用程序中使用外部控件,以增强应用程序的功能,实现ASP.NET和VB.NET不能实现或很难实现的功能。动手做[例5-12](5-12.aspx)使用CreatObject方法name=Server.MachineNameScriptTimeout属性CreateObject方法动手做<HTML> <TITLE>[例5-12]使用CreatObject</TITLE><% Dimfs
Dimts
fs=Server.CreateObject("Scripting.FileSystemObject")
ts=fs.OpenTextFile("E:\Book\asp书中的实例\5-12.txt",1)
lDisplay.Text=ts.ReadAll()
ts.Close()%><BODY><FORMRUNAT="SERVER"> <asp:labelid="lDisplay"forecolor="Blue"font-size="20pt"runat=server/></FORM></BODY></HTML>点评:在程序中,使用CreateObject方法创建了一个文件系统对象FileSystemObject。然后,使用文件系统对象打开一个文本文件5-12.txt,读取其所有内容,并在静态文本标签lDisplay中显示出来。在该程序中,我们看到CreateObject方法的参数形式为:Scripting.FileSystemObject其中,Scripting表示对象所属的库,FileSystemObject表示要实例化的对象名。运行结果如图5-12所示4.Execute方法执行当前服务器上的另一个aspx页,执行完该aspx页后,再返回到本页继续执行。例如,调用“5-12.aspx”:Server.Execute(“5-12.aspx”)5.HtmlEncode方法、HtmlDecode方法、URLEncode方法和URLDecode方法(1)HtmlEncode方法对字符串进行HTML编码并返回已编码的字符串,以完成去掉特殊字符串的特殊含义。在通常情况下,有很多字符串是有特定含义的,如“<HR>”在HTML中表示标尺线。如果要在网页上显示“<HR>”字符串,而不是标尺线,使用以下方法是不行的:Response.Write(“<HR>”)它要在网页上显示一个标尺线。正确的方法是使用以下语句:Response.Write(Server.HtmlEncode(“<HR>”))通过使用HtmlEncode方法,“<HR>”被编码为“<HR>”。另外,使用HTML编码的技术可以在网页上显示法语字符、德语字符、空格、等号。(2)HtmlDecode方法对HTML编码的字符串进行解码,并返回已解码的字符串。如使用:Server.HtmlEncode(“<HR>”)把HTML编码“<HR>”转换为“<HR>”。(3)URLEncode方法它与HtmlEncode方法类似,只不过他用于编码URL。如:Server.URLEncode("")把URL“”转为“http%3a%2f%2”。(4)URLDecode方法它与HtmlDecode方法类似,只不过他用于解码URL6.MapPath方法MapPath方法将虚拟路径或相对于当前页的相对路径转为相对应的物理路径。动手做[例5-13](5-13.aspx)使用MapPath<HTML> <TITLE>[例5-13]使用MapPath</TITLE><BODY><%
Response.Write("虚拟路径aspbook/include的物理路径是:")
Response.Write("<P><FONTSize=4Color=Blue>")
Response.Write(Server.MapPath("aspbook/include"))
Response.Write("</FONT>")%></BODY></HTML>点评:程序利用MapPath方法把虚拟路径“aspbook/include”转换为物理路径“E:\Book\asp书中的实例\aspbook\include”。运行结果如图5-13所示:Transfer方法终止当前页的运行转去执行另外的页。被终止页的所有内置对象的状态和值均被保存下来可以被另外页的程序访问到。动手做[例5-14](5-14.aspx)使用Transfer
<HTML> <TITLE>[例5-14]使用Transfer</TITLE><SCRIPTLanguage="VB"RUNAT="SERVER">SubtName_Change(SenderAsObject,EAsEventArgs) Server.Transfer("5-14-1.aspx")EndSub</SCRIPT><BODY><FORMRUNAT="SERVER"> <asp:textboxid="tName"OnTextChanged="tName_Change"runat=server/> <asp:buttonid="bSubmit"Text="确认"runat=server/><p></FORM></BODY></HTML><HTML> <TITLE>[例5-14]使用Transfer</TITLE><BODY><%
Response.Write("<P>以下为5-14.aspx网页tName文本框的内容:<P>")
Response.Write(request.form("tName"))%></BODY></HTML>点评:在文本框中输入“测试Transfer”,按下“确认”按钮,则会执行Server.Transfer("5-14-1.aspx")语句。终止当前页的执行,转去执行“5-14-1.aspx”页。在“5-14-1.aspx”页中,使用request.form("tName")语句获取“5-14.aspx”页的文本框“tName”的值,然后显示出来。运行结果如图5-14所示:一个ASP.NETApplication对象表示驻留在Web站点特定目录下的所有文件、子目录、页、处理程序、模块和代码的总和。在ASP.NET中,使用Application对象代表Web应用程序的运行实例。它的生命周期从请求该Web应用程序的第一个页开始,到该Web站点关闭时结束。因此,保存在Application对象中的数据就可以在该Web应用程序的不同页面间共享,达到在不同页面间传递数据的目的。或者在该Web应用程序的不同用户之间传递数据。另外,一个Web站点可以包含不止一个ASP.NET应用程序,而每个ASP.NET应用程序的运行实例都可以由一个Application对象来表达。Application维护了一个键值对集合,用键值来区分集合中的不同项目。当您用键值存储了一个数值,就可以在Web应用程序的不同页面中使用该数值,从而达到数据共享的目的。
5.2.4Application对象1.使用Application对象使用Application对象可以存储值、获取值和删除值。(1)创建并存储键值其语法形式为:Application(“键值”)=值或Application.Add(“键值”,值),如:Application(“UserName”)=”王大力”表示在Application对象中存储一个数据项UserName,它的值是“王大力”。(2)获取键值其语法形式为:变量=Application(“键值”)或变量=Application.Item(“键值”),如:DimnameAsStringname=Application(“UserName”)表示把Application对象中的数据项UserName的值“王大力”赋给变量name。(3)删除键值其语法形式为:Application.Remove(“键值”),如:Application.Remove(“UserName”)从Application对象中删除UserName项。(4)删除所有键值其语法形式为:Application.RemoveAll()或Application.Clear()2.Lock和UnLock方法ASP.NET并发处理客户端的请求,所以可能存在多个用户或一个用户多次对Application对象的同时存取。这样就可能出现多个用户修改同一个Application对象中的项目,造成数据不一致的问题。为了解决对Application对象中的项目访问同步问题,在修改Application项目值前,使用Lock方法锁定Application项目。修改完成后,使用UnLock方法解除对Application项目的锁定,以便其他用户可以访问该项目。注意:Lock和UnLock方法应该成对使用。例如:Application.Lock()Application(“UserName”)=“刘大力”Application.UnLock()3.Application事件Application对象还有可用于在ASP.NET应用程序启动和停止时触发的事件。当Web服务器启动并允许对ASP.NET应用程序所包含的文件进行请求时触发Application_Start事件。在ASP.NET应用程序响应请求时,作为HTTP执行管线链中的第一个事件触发Application_BeginRequest事件。当安全模块已建立用户标识时,触发Application_AuthenticateRequest事件。在ASP.NET应用程序响应请求时,作为HTTP执行管线链中的最后一个事件触发Application_EndRequest事件。当ASP.NET应用程序终止时,触发Application_End事件。这些事件处理过程存在于一个特殊的文件――Global.asax文件中,该文件位于ASP.NET应用程序的根目录中。如果该文件存在,则IIS会自动找到他,执行其中的事件处理程序。动手做[例5-15]统计在线人数和访问该网站的所有用户数目<HTML> <TITLE>[例5-15]使用Application事件统计访问量</TITLE><BODY>
<%
Response.Write("已有"&Application("AllUser")&"位用户访问了本网站")
Response.Write("<BR>")
Response.Write("现在有"&Application("OnUser")&"位用户在线")%></BODY></HTML><ScriptLanguage="VB"Runat="Server">SubApplication_Start(ByValsenderAsObject,ByValeAsEventArgs)
Application.Lock()
Application("AllUser")=0
Application("OnUser")=0
Application.UnLock()EndSubSubSession_Start(ByValsenderAsObject,ByValeAsEventArgs)
Application.Lock()
Application("AllUser")=Convert.ToInt32(Application("AllUser"))+1
Application("OnUser")=Convert.ToInt32(Application("OnUser"))+1
Application.UnLock()EndSubSubApplication_BeginRequest(ByValsenderAsObject,ByValeAsEventArgs)'在每个请求开始时激发
EndSubSubApplication_AuthenticateRequest(ByValsenderAsObject,ByValeAsEventArgs)'尝试对使用进行身份验证时激发
EndSubSubApplication_Error(ByValsenderAsObject,ByValeAsEventArgs)'在发生错误时激发
EndSubSubSession_End(ByValsenderAsObject,ByValeAsEventArgs)
Application.Lock()
Application("OnUser")=Convert.ToInt32(Application("OnUser"))-1
Application.UnLock()EndSubSubApplication_End(ByValsenderAsObject,ByValeAsEventArgs)'在应用程序结束时激发
EndSub</Script>点评:当启动应用程序时,会引发Application_Start事件,可为全部用户数和在线用户数设置初值。当一个新用户访问站点时,Global.asax文件的Session_Start事件将被引发,可在此使全部用户数和在线用户数增一。当用户与站点断开后会引发Session_End事件,可以在此使在线用户数减一。程序运行结果如图5-15所示。上一节我们讲到Application对象代表Web应用程序的实例,负责维护Web应用程序运行过程中所有用户的信息。在ASP.NET中,提供另外一个对象――Session对象来维护一个用户、一次会话的信息。所谓会话就是一个用户在一段时间内对某一个站点的一次访问。其实,Session对象的使用与Application的使用非常类似。1.
使用Session对象使用Session对象可以存储值、获取值和删除值。(1)创建并存储键值其语法形式为:Session(“键值”)=值或Session.Add(“键值”,值)如:Session(“UserID”)=”u1001”表示在Session对象中存储一个数据项UserID,它的值是“u1001”。
5.2.5Session对象(2)获取键值其语法形式为:变量=Session(“键值”)或变量=Session.Item(“键值”)如:DimidAsStringid=Session(“UserID”)表示把Session对象中的数据项UserID的值“u1001”赋给变量id。(3)删除键值其语法形式为:Session.Remove(“键值”)如:Session.Remove(“UserID”)从Session对象中删除UserID项。(4)删除所有键值其语法形式为:Session.RemoveAll()或
Session.Clear()2.TimeOut属性Timeout属性以分钟为单位为该应用程序的Session对象指定超时时限。如果用户在该超时时限之内不刷新或请求网页,则该会话将终止。3.SessionID属性获取用于标识会话的唯一会话ID。它是用于标识和区分每个会话的基础。4.Abandon方法取消当前会话。一旦调用了Abandon方法,当前会话就不再有效,所有存储在Session对象中的数据就会被删除。5.Session事件Session对象还有可用于在会话启动和停止时触发的事件。在创建新会话时发生Session_OnStart事件,它是设置会话期变量的最佳时机,因为在访问任何页之前都会先设置它们。在会话超时或调用Session对象的Abandon方法后发生Session_OnEnd事件。Cookie是保存在客户机硬盘上的一个文本文件,它可以存储有关特定客户端、会话或应用程序的信息。Cookie可由浏览器访问。当浏览器访问同一网页时,会将Cookie中的信息连同请求信息一起发送给服务器。服务器通过提取Cookie的值,就可以为用户提供个性化服务了。Cookie包括会话Cookie和永久Cookie两种。前者是临时性的,只在浏览器打开时存在;后者则永久性地存在于客户的硬盘上,并且在指定过期日期之前一直可用。当没给Cookie设置过期日期时,它将自动成为一个会话Cookie;当给Cookie设置一个过期日期时,它将成为一个永久Cookie。当向客户机写入Cookie时,如果该Cookie不存在,则自动创建一个Cookie。如果该Cookie存在,则用新值覆盖旧值。在ASP.NET中,使用HttpCookie类实现Cookie,该类的常见属性见表5-3。5.2.6Cookie属性说明Domain获取或设置Cookie的一个域Expires获取或设置Cookie的过期日期Name获取或设置Cookie的名称Path获取或设置此Cookie适用的URI,如果未指定此属性,则会将此Cookie发送到源服务器上的所有页。Secure获取或设置Cookie的安全级别,当此属性为true时,该Cookie只能通过https://请求来发送Value获取或设置Cookie的值创建Cookie在ASP.NET中,通过Response的Cookies集合来创建Cookie。如:Response.Cookies("User").Domain="";Response.Cookies("User")("ID")="20";Response.Cookies("User")("Name")="vip";该段代码建立一个“User”Cookie,并且设置了多个键值――ID和Name。由于设置了Cookie的Domain属性,该Cookie只呈现给的Web服务器。另外,还可以使用Response的AppendCookie方法来创建Cookie。如:DimcookieAsNewHttpCookie(“User”)cookie.Values.Add(ID,”20”)cookie.Values.Add(Name,”vip”)Response.AppendCookie(cookie)
访问Cookie在ASP.NET中,通过Request对象的Cookies集合来访问Cookie,如:DimnameAsStringName=Request.Cookies("User")(“Name”)该段代码访问“User”Cookie的Name键值。动手做[例5-16]利用Cookie保存所选的课程<html><TITLE>[例5-16]利用Cookie保存所选的课程</TITLE><SCRIPTLanguage="VB"RUNAT="SERVER">SubPage_Load(SenderAsObject,EAsEventArgs) IfNotPage.IsPostBackThen DimcookieAsHttpCookie cookie=Request.Cookies("Course") IfcookieisnothingThen cookie=NewHttpCookie("Course")
cookie.Values.Add("Course","asp")
Response.AppendCookie(cookie)
cookie.Expires=DateAdd("d",10,DateTime.Now) EndIf SelectCasecookie.Values("Course") case"asp" asp1.Checked=True case"vb" vb1.Checked=True case"C#" CS1.Checked=True EndSelect EndIfEndSubSubCourse_Click(SenderAsObject,EAsEventArgs) DimcookieAsHttpCookie cookie=Request.Cookies("Course") If asp1.CheckedThencookie.Values.Set("Course","asp") If vb1.CheckedThencookie.Values.Set("Course","vb") If CS1.CheckedThencookie.Values.Set("Course","C#")
Response.AppendCookie(cookie)
lDisplay.Text="现在的Cookie值是:"+Request.Cookies("Course").Values(0)EndSub</script><body>请选择课程:<BR><formrunat="server"><asp:radiobuttonid=asp1Text="asp程序设计"GroupName="Course"runat=server/><BR><asp:radiobuttonid=vb1Text="vb程序设计"GroupName="Course"runat=server/><BR><asp:radiobuttonid
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四川新火炬化工有限责任公司招聘13人备考题库【夺分金卷】附答案详解
- 2026上海AI实验室访问学者计划全球招募备考题库必考附答案详解
- 2026湖南长沙市芙蓉区招聘中学骨干教师10人备考题库附完整答案详解(网校专用)
- 2026清明上河园招聘备考题库含完整答案详解(有一套)
- 2026云南红河州石屏嘉胜能源有限责任公司招聘5人备考题库含答案详解【夺分金卷】
- 2026广东清远市阳山县融媒体中心招聘新闻人员4人备考题库【综合卷】附答案详解
- 2026中冶京诚工程技术有限公司春季校园招聘备考题库及参考答案详解(模拟题)
- 2026广东广州市海珠区消防安全委员会办公室招聘街道微型消防站队员26人备考题库带答案详解ab卷
- 2026浙江嘉兴市海宁市儿童福利院招聘2人备考题库【模拟题】附答案详解
- 北京市关于师德的制度
- 【新高教版中职数学基础模块下册PPT】7.2旋转体
- 绝对最大弯矩公式
- 维克多高中英语3500词汇
- 水稻幼穗发育
- 疗养院新康复大楼lte室内分布测试报告
- 全国优质课一等奖小学四年级道德与法治下册《学会合理消费》(精品课件)
- 核磁共振上册氢谱
- 皮肤科常见疾病康复
- 输气管道毕业论文输气管道工程初步设计
- 第3章物流类型
- 烹饪化学教程课件
评论
0/150
提交评论