ASP内置对象

一、内置对象的概述  

  为了实现网站的常用功能,ASP提供了内置对象。内置对象的特点是:不需要事先声明或者创建一个实例,可以直接使用。常见的内置对象有

  •   Request对象:获取客户端的信息
  •   Response对象:将信息返回给客户端浏览器
  •   Application对象:存储一个应用程序的共享数据以供多个用户使用
  •   Session对象:在访问过程中存储单个用户信息
  •   Server对象:提供服务器属性信息
  •   ObjectContext对象:控制事务处理

二、Request请求对象

  在客户端/服务器结构中,当客户端Web页面向网站服务器端传递数据时,ASP通过Request对象能够获取客户端提交的全部信息。包括客户端的HTTP变量、在网站服务器端存放的客户端浏览器的Cookie数据、赋予URL之后的字符串信息、页面表单传送的数据以及客户端认证等

  Request对象的语法如下

    Request[.collection | property | method](variable)

    collection:Request对象的数据集合

    Property:Request对象的属性

    method:Request对象的方法

    variable:由字符串定义的变量参数,指定要从集合中检索的项目或者作为方法、属性的输出

  例如:通过Request对象的QueryString数据集合取得传值参数myid的值并赋值给变量

    <%

      Dim id

      id=Request.QueryString("myid")  

    %>

  这里值得注意的是,在使用Request对象时,collection、property和method最多只能选择一个;也可以三个都不选,这是Request对象根据以下顺序搜索集合:QueryString、Form、Cookie、Servervariable、ClientCertificate,当发现第一个匹配的变量时,接确定是要访问的成员

  QueryString对象包括5个集合,1个属性和一个方法

成员 描述
Form数据集合 读取HTML表单域控件的值,即POST方式提交的数据
QueryString数据集合 读取赋予URL地址后的字符串的值
Cookies数据集合 读取存放在客户端浏览器Cookie的内容
ServerVariables数据集合 读取客户端请求发出的HTTp报头值及WEB服务器的环境变量值
ClientCertificate数据集合 读取客户端的验证字段
TotalBytes属性 返回客户端发出请求的字节数量
BinaryRead方法 以二进制方式读取客户端请求,并返回一个变量数组

  1.获取表单数据

  表单是表准HTML文件的一部分,用户通过点击表单中的提交按钮提交输入的数据

  在含有ASP动态代码的WEB页面中,可以使用Request对象的Form集合收集客户端的以表单形式发送到服务器的信息

  语法:

    Request。Form(element)[index | .count]

    element:指定集合要检索的表单元素的名称

    index:索引值,为可选参数,可以取得表单中名称相同的元素值。索引值是1至Request.Form(element).Count之间的任意整数

    Count:集合中相同名称元素的个数

 1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 6 <title>获取表单数据</title>
 7 </head>
 8 <body>
 9     <form id="form1" name="form1" method="post" action="code.asp">
10         <p>用户名:</p>
11         <input name="txt_username" type="text" id="txt_username" />
12         <p>密&nbsp;码:</p>
13         <input name="txt_pwd" type="password" id="txt_pwd" />
14         <p style="width:200px" align="center">
15         <input type="submit" name="submit" value="提交" />
16         &nbsp;
17         <input type="reset" name="submit2" value="重置" />
18     </form>
19 </body>
20 </html>
表单数据
 1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 6 <title>无标题文档</title>
 7 </head>
 8     <p>用户名:<%=Request.Form("txt_username")%>
 9     <p>密码为:<%=Request.Form("txt_pwd")%>
10 <body>
11 </body>
12 </html>
code.asp

   表单中的多个对象具有相同名称时,可以利用Count属性获得具有相同名称对象的总数,然后通过索引获取不同内容值,也可以应用for each ...next语句来获取相同名称对象的不同内容值。

  代码:获取复选框的值并显示其内容

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>获取表单数据</title>
</head>
<body>
    <form id="form1" name="form1" method="post" action="code.asp">
        <p>爱好:</p>
        <input name="favour" type="checkbox" id="favour" value="计算机" />计算机
        <input name="favour" type="checkbox" id="favour" value="英语" />英语
        <input name="favour" type="checkbox" id="favour" value="篮球" />篮球
        <input name="favour" type="checkbox" id="favour" value="旅游" />旅游
        <p style="width:200px" align="center">
        <input type="submit" name="submit" value="提交" />
        &nbsp;
        <input type="reset" name="submit2" value="重置" />
    </form>
</body>
</html>
表单数据
 1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 6 <title>无标题文档</title>
 7 </head>
 8     <%
 9         dim nums,i
10         nums=request.Form("favour").count
11         for i=1 to nums
12             response.Write request.Form("favour")(i) & "<br>"
13         next
14     %>
15 <body>
16 </body>
17 </html>
code.asp

 

   2.查询字符串数据

  通过Request对象的QueryString数据集合可以查询字符串数据

  语法:

    Request.QueryString(variable)[(index) | .count]

    variable:指定要检索的HTTP查询字符串中的变量名

    index:索引值,为可选参数,可以取得HTTP查询字符串中相同变量名的变量值。索引值可以是1至Request.QueryString(variable).Count之间的任意整数

    Count:查询字符串中相同名称变量的个数

  有两种情况要在服务器端指定利用QueryString数据集合取得客户端传送的数据,一是表单中通过Get方式传递数据,二是利用超链接标记<a>传递参数

  ①通过get方式传递的表单数据

  与Form数据集合相似,QueryString数据集合可以取得表单中通过get方式传递的数据。

  如例:获取get方式传递的表单数据

 1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 6 <title>获取表单数据</title>
 7 </head>
 8 <body>
 9     <form id="form1" name="form1" method="get" action="code.asp">
10         <p>职&nbsp;&nbsp;&nbsp;务:</p>
11         <input name="post" type="radio" id="favour" value="学生" />学生
12         <input name="post" type="radio" id="favour" value="老师" />老师
13         <p>所在专业:</p>
14             <select name="profession" size="3" id="profession">
15                 <option value="计算机科学与技术">计算机科学与技术</option>
16                 <option value="英语">英语</option>
17                 <option value="数学">数学</option>
18         <p style="width:200px" align="center"></p>
19         <input type="submit" name="submit" value="提交" />
20         &nbsp;
21         <input type="reset" name="submit2" value="重置" />
22     </form>
23 </body>
24 </html>
表单数据
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
    
    你的职位:<%=request.QueryString("post")%> 
    <br>
    你的专业:<%=request.QueryString("profession")%> 
    
<body>
</body>
</html>
code.asp

  ②使用超链接传递的参数

  在程序中,可以直接利用HTML的<a>标签传递参数,传递的参数写在?后面,如果有多个参数则使用&作为分隔符,使用Request对象的QueryString数据集合可以取得所传递的参数值

  3.获得服务器端环境变量

   通过Request对象的ServerVariables数据集合可以取得服务器端的环境变量信息。这些信息包括发出请求的浏览器信息、构成请求的HTTP方法、用户登录windows NT的账号、客户端的IP地址等。服务器端环境变量对ASP程序有很大帮助,使程序能够根据不同情况进行判断,提高了程序的健壮性。 服务器端环境变量是只读变量,只能查阅,不能设置。

  语法:

    Request.ServerVariables(server_environment_variable)

    server_environment_variable:服务器端环境变量

  代码:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>服务器环境变量</title>
</head>
<body>
    <%
        Response.Write "服务器名称、域名和IP地址(SERVER_NAME):" & Request.ServerVariables("SERVER_NAME") & "<br>"
        Response.Write "客户端IP地址(REMOTE_ADDR):" & Request.ServerVariables("REMOTE_ADDR") & "<br>"
        Response.Write "客户端提供的访问路径(PATH_INFO):" & Request.ServerVariables("PATH_INFO") & "<br>"
    %>
</body>
</html>
View Code

 三、Response响应对象

   Response对象时ASP内置对象中直接对客户端发送数据的对象。Request请求对象与Response响应对象构成了客户端/服务器响应的模式。通过Response可以将客户端重定向到一个指定的页面中,可以设置客户端的Cookie值等。

  语法:

    Response对象的语法如下:

    Response.collection | property | method

    collection:Response对象的数据集合

    property:Response对象的属性

    method:Response对象的方法

  例如:使用Response对象的Cookie数据集合设置客户端的Cookie关键字并赋值

    <%

      Response.Cookies("info")="ASP"

    %>

  Response与一个HTTP响应对应,通过设置其属性和方法可以控制如何将服务器端的数据发送到客户端浏览器。Response主要成员如下:

成员 描述
Cookies数据集合 设置客户端浏览器的Cookie值
Buffer属性 表明输出页是否被缓冲
CacheControl属性 决定代理服务器是否能缓存ASP生成的输出页
Status属性 服务器返回的状态行的值
ContentType属性 指定响应的HTTP内容类型
Charset属性 将字符集的名称添加到内容类型标题中
Expires属性 在浏览器中缓存页面超时前,可以指定缓存时间
ExpiresAbsolute属性 指定浏览器上缓存页面超时的日期和时间
IsClientConnected属性 表明客户端是否与服务器断开
PICS属性 将PICS标记的值添加到响应的标题的PICS标记字段中
Write方法 直接向客户端浏览器输出数据
End方法 停止处理.asp文件并返回当前结果
Redirect方法 重定向当前页面,连接另一个URL
Clear方法 清除服务器中缓存的HTML信息
Flush方法 立即输出缓冲区的内容
BinaryWrite方法 按照字节格式向客户端浏览器输出数据,不进行任何字符集的转换
AddHeader方法 设置HTML标题
AppendToLog方法 在WEB服务器的日志文件中记录日志

  1.向客户端发送数据

  使用Response对象的Write方法可以将指定的字符串信息输出到客户端。Write方法是Response对象常用的方法

  语法:

    Response.Write variant

    variant:输出到浏览器的变量单数句或者字符串

  注意:如果在输出字符串中包含ASP程序定界符,“%>”,WEB服务器解释时就会以为ASP语句结束,造成服务器错误。因此,在ASP程序中需要向浏览器输出"%>"时,可以用"%\>"代替,即将其作为转义符输出,这样ASP处理引擎就会自动转化"%>"为字符串

   2.利用缓冲输出数据

  WEB服务器响应客户端的请求时,是以信息流的形式将响应数据发送给客户端的,发送过程是先返回响应头,再返回正式的页面。在处理ASP页面时,信息流的发送则是生成一段页面就立即发送一段信息流I返回给浏览器。

  ASP提供了另一种发送数据的方式,即利用缓存输出。缓存输出是指WEB服务器生成ASP页面时,等ASP页面全部处理完之后,再返回用户请求

  ①使用缓冲输出

  a.Buffer属性:在默认情况下缓冲是关闭的,通过设置Response对象的buffer属性为true,可以打开缓冲。缓冲启用后凡是输出到客户端的信息都暂时存入缓冲区,直到整个ASP页面执行结束或调用了Response对象的flush或end方法后,才将响应发送给客户端的浏览器。

  语法:

    Response.Buffer=True/False

  Response对象的Buffer属性必须在任何信息发向客户端浏览器之前设置,否则是无效的,并且会导致一个错误

  例如:在页面中 启用缓冲

  <%

    Response.Buffer="True"

  %>

   b.Flush方法:用于将缓冲区内容立即发送给客户端浏览器。

  语法:

    Response.Flush

  c.Clear方法:用于清除缓冲区

  语法:

    Response.Clear

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>使用缓冲输出</title>
</head>
<body>
    <%
        dim i
        for i=1 to 20
            response.Write i & "<br>"
            if i=10 then response.Flush()
         next
         response.Clear()
    %>
</body>
</html>
View Code

 

  ②设置缓冲的有效期限

  保存在缓存中的内容是有一定期限的,Response提供的一些属性控制缓存的期限

  a.CacheControl:应用程序可以通过代理服务器将页面发送给客户。代理服务器代表客户端浏览器向WEB服务器请求页面。代理服务器高速缓存HTML页,这样对同一页的重复请求会迅速高效的返回到浏览器。

  在默认情况下,ASP指示代理服务器不要高速缓存ASP页本身。通过Response对象的CacheControl属性设置Cacche-Control头字段,可以允许代理服务器高速缓存特定页面。

  语法:

    Request.CacheControl [=Cache_Control_Header]

  Cache_Control_Header:表示缓冲存储器控制标题,取值为private或public

  b.Expires属性:用于指定在客户端浏览器上缓冲存储的页面距过期还有多少时间。

  语法:

    Response.Expires  [=number]

    number:指定缓存的页面距离过期还有多少时间,单位为分钟

  c.ExpiresAbsolute:指定缓存于客户端浏览器中的页面到期的日期时间

  语法:

    Response.ExpiresAbsolute [date][time]

  date:指定页面的到期日期

  time:指定页的到期时间

  3.重定向网页 

   网页重定向是指从一个网页跳转到其他页面。应用Response对象的Redirect方法可以将客户端浏览器重定向到另一个页面。如果需要从当前网页转移到一个新的URL,而不用经过用户去单击超链接或者搜索URL,此时可以使用该方法使用户浏览器重定向直接重定向

  语法:

  Response.Redirect URL

  URL:资源定位符,表示浏览器重定向的目标页面

  调用Redirect方法,将会忽略当前页面所有输出而直接定向到被指定的页面,即在页面中显示设置的响应正文都被忽略

  例如:网页重定向

 1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 6 <title>重定向</title>
 7 </head>
 8 <body>
 9     <%
10         if datepart("yyyy",now()) <> "2000" then        '判断当前时间中的年份
11             Response.Write "欢迎您!"
12             Response.Redirect "index_02.asp"
13         end if
14     %>
15 </body>
16 </html>
View Code
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
    <%
        Response.Write "欢迎浏览index_02页面中的内容"
        
    %>
<body>
</body>
</html>
View Code

 

   4.向客户端输出二进制数据

   调用Response对象的BinaryWrite方法可以不进行任何字符集转换,而直接向客户端浏览器发送二进制数据。

  语法:

    Response.BinaryWrite Variable

  Variable:是一个变量,它的值是将要输出的二进制数据。二进制数据一般是指非文字资料,如图像文件,声音文件等

  例如:输出二进制数据

 1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 6 <title>表单</title>
 7 </head>
 8 <body>
 9     <form id="form1" name="form1" method="post" action="code.asp">
10         <p>用户名:
11             <input name="name" type="text" id="name" />
12         <p>性&nbsp;别
13             <input name="sex" type="radio" value="" checked="checked"/>
14 15             <input name="sex" type="radio" value=""/>
16 17         <p style="width:200px" align="center">
18             <input type="submit" name="Submit1" value="提交" />
19             <input type="reset" name="submit2" value="重置" />
20     </form>
21 </body>
22 </html>
View Code
 1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 6 <title>无标题文档</title>
 7 </head>
 8     <%
 9         dim counter,array(2)
10         counter=request.TotalBytes        '获得客户端以post方式发送的表单数据的字节数
11         array(0)=request.BinaryRead(counter) '以二进制方式读取数据
12         Response.BinaryWrite array(0)         '输出二进制数据
13     %>
14 <body>
15 </body>
16 </html>
View Code

 

  5.在网页中使用Cookie  

   Cookie实际上是一个字符串或者一个标记。当一个包含Cookie的页面被用户浏览器读取时,浏览器就会为这个站点自动建立Cookie文件,将此文件保存在系统目录中的Cookie文件夹中,并且会把接受的数据写进这个文件,这样一个Cookie就被存入到本地硬盘中,当需要时该网站可以从用户的本地硬盘读取这些Cookie值,Cookie文件中 的变量称为Cookie变量。

  Cookie在指定的声明周期内都有效,所以WEB设计人员可以使用Cookie在各个不同的ASP页面间传递变量

  a.写入Cookie

  使用Response对象的cookies数据集合可以在客户端写入Cookie

  语法:

    Response.Cookies(cookiesname)[(key) | .attribute]=value

    cookiesname:必选参数,指定Cookie的名字

    key:可选参数,设置Cookie关键字

    attribute:Cookie的属性参数,指定cookie自身的有关信息。

    value:表示指定给Cookie的值

名称 描述
Expires 仅可写入,指定该Cookie到期的时间
Domain 仅可写入,指定Cookie仅送到该网域
Path 仅可写入,指定Cookie仅送到该路径
Secure 仅可写入,设置该Cookie的安全性
HasKeys 只读,指定Cookie是否包含关键字,也就是判定Cookies目录下是否包含其他Cookies

  b.读取Cookie

  使用Request对象的Cookie数据集合来读取cookie的值

  语法:

    Request.Cookies(cookiesname)[(key) | .attribute]  

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>在网页中使用Cookie</title>
</head>
<body>
    <%
        Response.Cookies("user")("username")="UserLi"    '定义cookies变量关键字
        Response.Cookies("user")("password")="pwdpwd"    '
        Response.Cookies("user").Expires=date()+1        '定义Cookies变量User的有效期
    %>
    <a href="code.asp">查看cookies变量</a>
</body>
</html>
View Code
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
    <%
        if request.Cookies("user").haskeys then        'Cookies变量user包含关键字
            for each key in request.Cookies("user")    '遍历关键字
                Response.Write "Cookies 关键字" & key & "的值为:" & Request.Cookies("user")(key) & "<br><br>"
            next
        end if
    %>
<body>
</body>
</html>
View Code

 

  6.停止输出

  调用Response对象的end方法可以使WEB服务器上的ASP处理程序停止处理ASP脚本,并返回当前结果,此语法后面的内容将不会被处理

  语法:

    Response.end

  使用Response对象的end方法可以强制结束ASP程序的执行,在调试程序时可以应用该方法。

四、Application应用程序对象

   ASP程序是在WEB服务器上执行的,在WEB站点中创建一个基于ASP的应用程序之后,可以通过Application对象在ASP应用程序的所有用户之间共享信息。也就是说,Application对象中包含的数据可以在整个WEB站点中被所有用户使用,并且可以在网站运行期间持久保存数据。应用Application对象可以完成统计网站的在线人数、创建多用户游戏及多用户聊天室等功能

  语法:

  Application.collection | method

  collection:Application对象的数据集合

  method:Application对象的方法

  Application对象可以定义应用级变量,应用级变量是一种对象级的变量,隶属于Application对象,它的作用域等同于Application对象的作用域

  例如,通过Application对象定义一个应用级变量

    <% Application ("Username")="Manager"%>

  Application对象没有内置的属性,其成员如表

成员 描述
Contents集合 在Application层次的所有可用的变量集合,不包含使用<Object>标记建立的变量
StaticObject集合 在Global.asa文件中通过使用<Object>标记建立的Application层次的变量集合
Contents.Remove方法 从Application对象的Contents集合中删除一个项目
Contents.RemoveALL方法 从Application对象的Contents集合中删除所有项目
Lock方法 锁定Application对象,其他用户就不能修改同一个Application变量
Unlock方法 解除Application变量的锁定状态
Application_OnStart事件 当应用程序的第一个页面被请求时,触发这个事件
Application_OnEnd事件 当WEB服务器关闭时这个事件中的代码被触发

  1.访问Application应用级变量

  绝大部分的Application应用级变量都存放于Contents集合中,Contents数据集合包含所有通过脚本命令添加到应用程序中的项目,可以使用Contents集合获取给定的应用程序作用域的项目列表或者指定一个特殊项目为操作对象,当创建一个新的Application应用级变量时,其实就是在Contents集合中添加了一项。

  语法:

  Application.Contents(key)

  key:用于指定要获取的项目的名称

  Application对象的Contents数据集合包含用Server对象的createobject方法创建的对象和通过Application对象声明建立数值变量,不包含以<Object>标记定义的对象,存储在Application集合中的信息在整个应用程序执行期间有效且具有程序作用域

  如例:访问应用级变量

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head>
<body>
    <%
        '定义应用级变量
        Application("user")="userLi"
        Application("login")=32
        '输出Contents集合成员
        for each key in Application.Contents
            response.write("<br>" & key & "=" & Application.Contents(key))
        next
    %>
</body>
</html>
View Code

  2.制作网站计数器

  Application对象的Application_OnStart事件和Application_OnEnd事件以及Session对象的Session_OnStart事件和Session_OnEnd事件都是定义在Global.asa文件中的

  Global.asa文件是用来存放执行任何ASP应用程序期间的Application、Session事件程序,当Application或者Session对象被第一次调用或结束时,就会执行该Global.asa文件内的对应程序。一个应用程序只能对应一个Global.asa文件,该文件只能存放在网站的根目录下才能正常运行。

  如例:制作网站计数器

<script language="vbscript" runat="server">
sub Application_OnStart()
    if Isempty(Application("Counter")) then
        Application.Lock()
        Application("Counter")=0
        Application.UnLock()
    end if
    //访问量增加1
    Application.Lock()
    Application("Counter")=Application("Counter")+1
    Application.UnLock()
end sub
</script>
Global.asa
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head>
<body>
    您是第
    <%
        response.Write Application("Counter")
    %>
    位访问者
</body>
</html>
View Code

五、Session会话对象

   使用Session对象可以存储用户个人会话所需的信息。当用户站点不同页面切换时,存储在Session对象中的变量不会清除。使用Session对象可以实现用户信息在多个WEB页面共享,还可以跟踪浏览者的访问路径,这样对了解页面的访问情况及网站的定位都有帮助

  语法:

    Session.collection | property | method

    collection: Session对象的集合

    property:Session对象的属性

    method:Session对象的方法

  注意:使用Session变量的时候一定要注意拼写问题,WEB服务器不提供相应的语法检查,Option Explicit语法也不起作用

  Session对象的成员如下表所示

成员 描述
Contents集合 包含通过脚本命令添加到应用程序中的变量、对象
StaticObject集合 包含由<Object>标记添加到Session中的对象
SessionID属性 系统用来存放并且识别该连接期间所使用的唯一标识码,它的数据类型是长整型,并且是只读的
Timeout属性 应用程序会话的超时时限,以分钟为单位
CodePage属性 将用于符号映射的代码页
LCID属性 现场标识
Abandon方法 释放Session对象占用的资源
Session_OnStart事件 尚未建立会话的用户请求访问应用程序的页面时,触发该事件
Session_OnEnd事件 会话超时或者会话被放弃时,触发该事件

   1.访问Session会话级变量

  Session对象的Contents数据集合包含通过Server对象的CreateObject方法创建的对象和Session对象声明建立的变量,不包含以<Object>标记定义的对象。Session对象存在期间,存储在Session对象的Contents数据集合中的信息是有效的。

  语法:

    Session.Contents(key)

    key:用于指定要获取的项目名称

    Session对象的Contents数据集合支持For Each ... Next 和 For ... Next 循环,可以使用循环遍历Contents数据集合中的成员

  例如:访问Session会话级变量

 1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 6 <title></title>
 7 </head>
 8 <body>
 9     <%
10         '定义会话级变量
11         session("username")="dzj"
12         session("grand")="星级会员"
13         '输出集合的成员
14         for each key in session.Contents
15             response.Write("<br>" & key & "=" & Session.Contents(key))
16         next
17     %>
18 </body>
19 </html>
View Code

 

  2.返回当前会话的唯一标识符

  在创建会话时,服务器会为每一个会话生成一个单独的标识,使用Session对象的SessionID属性可以返回当前会话的唯一标识符,即返回用户的会话标识。

  3.释放Session

   Session对象只提供了Abandon方法,该方法将删除所有存储在Session对象中的数据并释放其所占的资源。

  语法:

    Session.Abandon

  如果未显式调用Abandon方法,服务器将在会话超时后删除Session对象数据。调用Abandon方法时,会话对象不会被立即删除,而是停止对该Session对象的监控,然后把Session对象放入队列,按顺序进行删除。也就是说,在调用Abandon方法后,可以在当前页上访问存储在Session对象中的变量,但在进入另一个WEB页面时,先前设置Session对象的变量值将为空,服务器会为用户新创建一个Session对象

  如例:释放Session对象

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head>
<body>
    <%
        '调用Abandon方法
        Session.Abandon()
        '输出Session对象的对象数据
        Response.Write "用户的SessionID为:" & Session.SessionID & "<br>"
        
        '定义会话级变量
        session("username")="dzj"
        session("grand")="星级会员"
        '输出集合的成员
        for each key in session.Contents
            response.Write("<br>" & key & "=" & Session.Contents(key))
        next
     %>
    <a href="code.asp" target="_balck">查看Session对象数据</a>
</body>
</html>
View Code
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
    <%
        username=session("username")
        if username="" then
            username=""
        end if
        response.Write "上一页的username为:" & username
        response.Write "<br>为用户新建的SessionID为:" & session.SessionID
    %>
<body>
</body>
</html>
View Code

 

六、Server服务对象  

  ASP的Server服务对象提供了对服务器上的属性和方法的访问,从而用来获取WEB服务器的特性和设置。

  使用Server对象可以创建各种服务器组件对象实例,程序调用创建对象的属性、方法以实现访问数据库、对文件进行输入、输出操作以及在WEB页上自动轮显广告图像等功能。使用Server对象还可以完成ASP脚本、处理HTML和URL编码以及获取服务器对象的路径信息等。

  语法:

    Server.property | method

    property:Server对象的属性

    method:Server对象的方法

  例如:通过Server对象创建一个Conn的ADO的Connection对象实例

    <%

      dim conn

      set conn = Server.CreateObject("ADODB.Connection")

    %>

  Server对象的成员如表所示

成员 描述
ScriptTimeOut属性 设置ASP脚本执行的超时时间
CreateObject方法 创建服务器组件的实例
MapPath方法 将指定的虚拟路径映射为物理路径
HTMLEncode方法 将HTML编码应用到指定的字符串
URLEncode方法 将URL编码规则应用到字符串
Execute方法 停止当前页面的执行,把控制转到指定路径的网页,当前环境也被传到新的网页,在该页面执行完成后将控制传递回原来的页面
Transfer方法 与Execute方法类似。不同的是,当新页面执行完成时,执行过程结束而不是返回原来的页面继续执行

 

   1.设置ASP脚本执行时间

  Server对象只提供一个ScriptTimeout属性,用于设置一个ASP脚本执行的超时时间,即脚本所允许的最长执行时间,如果在指定的时间内脚本没有执行完成,系统将停止其执行,并且显示超时错误。应用该属性可以防止出现一些进入死循环的程序导致页面服务器过载的问题

  语法:

    Server.ScriptTimeout=numSeconds

    numSeconds:用于指定脚本运行的最大可执行秒数,默认为90秒

  如例:设置ASP脚本执行时间

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head>
<body>
    <%
        Server.ScriptTimeout=10
        dim counter
        counter=0
        while(1)
            counter=counter+1
        wend
     %>
</body>
</html>
View Code

  上面的代码如果未设置脚本执行时间,程序将一直执行到服务器关闭,所以,设置合适的超时时间(脚本的)是十分必要的,否则将浪费服务器资源,堵塞用户请求,造成服务器忙的状态。

  2.创建服务器组件实例

  调用Server对象的CreateObject方法可以创建服务器组件的实例,实现一些依赖脚本语言不能实现的功能,ASP有标准的函数调用接口,只要在操作系统上登记注册了组件程序,COM就会在系统注册表里维护这些资源,以供程序员调用

  语法:

    Server.CreateObject(progID)

    progID:用于指定要创建的对象类型,其格式为

    [Vendor. ] Component [.Version]

    Vendor:表示拥有该对象的应用名

    Component:表示该对象组件的名字

    Version:表示版本号

  例如:创建一个名为FSO的FileSystemObject对象实例,并将其保存在Session对象变量中

    <%

      dim fso

      set fso=Server.CreateObject(“Scripting.FileSystemObject”)

      Session("ofile")=fso

    %>

  CreateObject方法仅能创建外置对象实例,不能用来创建系统的内置对象实例。用该方法创建的对象实例仅在创建它的页面中是有效的,即当处理完该页面程序后,创建的对象会自动消失,若想在其他页面引用该对象,可以将对象实例存储在Session对象或者Application对象中。

   3.获取文件的真是物理路径

  server对象的MapPath方法用于返回虚拟目录 在WEB服务器上的真是路径

  语法:

    Server.MapPath(String)

    String:用于指定虚拟路径的字符串

  虚拟路径如果是以"/"或"\"开始表示,MapPath将返回服务器端的宿主目录,如果虚拟路径以其他字符串开始,MapPath将把这个虚拟路径当作相对路径,相对于当前调用MapPath的页面,返回物理路径。

  若想取得当前运行的ASP文件所在的真实路径,可以使用Request对象的服务器变量PATH_INFO来映射当前文件的物理路径。

  例如:获取文件的真实物理路径

  调用Server对象的MapPath方法输出网站所在根目录、根目录下temp.asp文件的路径、与当前文件同目录file.txt文件的路径以及应用服务器环境变量PATH_INFO映射当前文件所在路径。

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head>
<body>
    <%
        Response.Write "Server.MapPath(""\"")返回网站根路径:" & Server.MapPath("\") & "<br>"
        Response.Write "Server.MapPath(""/temp.asp"")返回" & Server.MapPath("/temp.asp") & "<br>"
        Response.Write "Server.MapPath(""file.txt"")返回" & Server.MapPath("/temp.asp") & "<br>"
        Response.Write "Server.MapPath(Request.ServerVariables(""PATH_INFO""))返回当前文件的物理路径" & Server.MapPath(Request.ServerVariables("PATH_INFO")) & "<br>"
     %>
</body>
</html>
View Code

 

   4.输出HTML源代码

  通常情况下,HTML标记会被浏览器解释执行,不会显示在浏览器上,如果想将浏览器如实的显示在浏览器上,可以调用Server对象的HTMLEncode方法,该方法用于将HTML标记进行编码

  语法:

    Server.HTMLEncode(String)

    String:指定要编码的字符串

七、ObjectContext事务处理对象

  ASP提供ObjectContext对象控制ASP的事务处理,事务在服务器端运行,主要用于对数据库提供可靠的操作,当对数据库进行关联更改或者是同时更新多个数据库的时候,需要确定所有更改是否都准确执行,如果其中任何一项更改失败,数据库中的数据将恢复到操作之前的状态,只有在所有更改都准确执行时,数据的更新才有效。

  ASP事务处理程序是以MTS(Microsoft Transaction Server)事件处理系统为基础的,MTS是以组件为主的事件处理系统,用于开发、配置和管理Internet、Intranet服务器应用程序。MTS不能对文件系统或者其他非事务性资源的更改进行恢复工作。

  ObjectContext对象的使用语法如下:

    objectContext.method

    method:ObjectContext对象的方法

  例如:应用ObjectContext对象终止网页启动的事务处理程序

    <% ObjectContext.SetAbort %>

  ObjectContext 对象是通过和事务服务器通信来对事务进行控制的,所以在ASP中使用ObjectContext之前必须声明该页包含事务。在ASP中使用@TRANSACTION关键字来标识当前运行页面要以MTS事务服务器来处理,@TRANSACTION指令必须位于ASP文件中的第一行,否则会产生错误

  语法:

    <% @TRANSACTION=VALUE %>

    VALUE:@TRANSACTION关键字的取值

  @TRANSACTION关键字取值

取值 描述
Required 开始一个新的事务或者加入一个已经存在的事务
Requires_New 每次都开始一个新的事务
Supported 加入一个现有的事务处理,但不开始一个新的事务
Not_Supported 即不加入也不开始一个新的事务

  ObjectContext对象提供两个方法和两个事件控制ASP的事务处理。ObjectContext对象的成员如表

成员 描述
SetAbort方法 终止当前网页所启用的事务处理,将事务先前所做的处理撤销到初始状态
SetComplet方法 成功提交事务,完成事务处理
OnTrandactionAbort事件 事务终止时触发的事件
OnTransactionCommit事件 事务成功提交时触发的事件

   1.终止事务的处理

   ObjectContext对象提供了SetAbort方法和OnTransacctionAbort事件进行终止事务的处理。

  a.SetAbort方法

    回滚操作

  语法:

    ObjectContext.SetAbort

  b.OnTransactionAbort事件

  脚本本身不能判断事务处理是成功还是失败,可以编写事务终止或者成功提交时调用的事件,显式说明事务处理的情况,OnTransactionAbort事件是当事务处理失败时引发的。

  语法:

    Sub OnTransactionAbort()

      ...处理程序

    End Sub

  如果事务异常终止,会触发该事件

  2.完成事务的处理

  ObjectContext对象提供了SetComplet方法和OnTransactionCommit事件对事务成功完成进行处理

  a.SetComplet方法:提交

  语法:

    ObjectContext.SetComplet

    调用该方法将会忽略脚本中以前调用过的任何SetAbort方法

  b.OnTransactionCommit事件

    当前事务成功时引发

  语法:

    Sub OnTransactionCommit()

      ...处理程序

    End Sub

  例如:应用Objectcontext进行事务处理

  ①在index.asp页面中建立表单并插入文本框及按钮控件,用于添加管理员信息

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head>
<body>
    <form name="form1" method="post" action="code.asp">
        <p>用户名:
          <input name="txt_name" type="text" id="txt_name" />
      </p>
        <p>密 码:   
          <input name="txt_pwd" type="text" id="txt_pwd" />
        </p>
        <p>
          <input name="add" type="submit" id="add" value="添加" />
          <input name="reset" type="reset" value="重置" />
                </p>
    </form>
</body>
</html>
View Code

 

  ②在程序处理页面code.asp中,首先建立数据库连接、获取表单传递的数据,然后执行Insert Into语句插入数据。如果此过程中出现异常则调用ObjectContext对象的Setabort方法终止事务,否则调用ObjectContext对象的SetComplet方法完成事务。分别定义OnTransactionAbort事件和OnTransactionCommit事件用于提示操作的执行结果

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
    <%
        '@Transaction=Required
    %>
    <%
        '创建数据库连接
        Set conn=Server.CreateObject("ADODB.Connection")
        sql="Driver={Microsof Access Driver (*.mdb)};DBQ=" & Server.MapPath("DataBase/db.mdb") & ""
        conn.open(sql)
        '获取表单数据
        txt_name=Request.Form("txt_name")
        txt_pwd=Request.Form("txt_pwd")
        if not isempty(Request("add")) then 
            if txt_name<>"" and txt_pwd<>"" then
                on error resume next
                '执行Insert Into语句
                sqlStr="insert into tb_user(UserName,PassWord) value('"&txt_name&"','"&txt_pwd&"')"
                conn.Execute(sqlStr)
                '如果出现异常则调用SetAbort方法终止事务
                If error.num>0 then
                    error.clear
                    ObjectContext.SetAbort()
                End if
                '调用SetComplet方法完成事务
                ObjectContext.SetComplete()
                '事务执行成功时触发的事件
                Sub OnTransactionCommit()
                    Response.Write("<Script language='javascript'> alert('添加信息成功'); window.location.href='index.asp';</script>")
                End sub
                
                '事务执行失败时触发的事件
                Sub OnTransactionAbort()
                    Response.Write("<Script language='javascript'> alert('添加信息失败,请重新输入'); window.location.href='index.asp';</script>")
                    Response.Flush()
                End Sub
            Else
            Response.Write("<Script language='javascript'> alert('请填写完整信息内容!'); window.location.href='index.asp';</script>")
            End If
        End If        
    %>
<body>
</body>
</html>
View Code

 

posted on 2018-04-08 20:33  呦,名字不赖嘛  阅读(1904)  评论(0编辑  收藏  举报

导航