19.ASP FileSystemObject对象

FileSystemObject 对象

FileSystemObject 对象用于访问服务器上的文件系统。此对象可对文件、文件夹以及目录路径进行操作。也可通过此对象获取文件系统的信息。

下面的代码会创建一个文本文件 (c:\test.txt),然后向这个文件写一些文本:

<%
dim fs,fname
      set fs=Server.CreateObject("Scripting.FileSystemObject")
      set fname=fs.CreateTextFile("c:\test.txt",true)
      fname.WriteLine("Hello World!")
      fname.Close
set fname=nothing
set fs=nothing
%>

FileSystemObject 对象的属性和方法描述如下:

属性

属性 描述
Drives 返回本地计算机上所有驱动器对象的集合。

方法

方法 描述
BuildPath 将一个名称追加到已有的路径后
CopyFile 从一个位置向另一个位置拷贝一个或多个文件。
CopyFolder 从一个位置向另一个位置拷贝一个或多个文件夹。
CreateFolder 创建新文件夹。
CreateTextFile 创建文本文件,并返回一个 TextStream 对象。
DeleteFile 删除一个或者多个指定的文件。
DeleteFolder 删除一个或者多个指定的文件夹。
DriveExists 检查指定的驱动器是否存在。
FileExists 检查指定的文件是否存在。
FolderExists 检查某个文件夹是否存在。
GetAbsolutePathName 针对指定的路径返回从驱动器根部起始的完整路径。
GetBaseName 返回指定文件或者文件夹的基名称。
GetDrive 返回指定路径中所对应的驱动器的 Drive 对象。
GetDriveName 返回指定的路径的驱动器名称。
GetExtensionName 返回在指定的路径中最后一个成分的文件扩展名。
GetFile 返回一个针对指定路径的 File 对象。
GetFileName 返回在指定的路径中最后一个成分的文件名。
GetFolder 返回一个针对指定路径的 Folder 对象。
GetParentFolderName 返回在指定的路径中最后一个成分的父文件名称。
GetSpecialFolder 返回某些 Windows 的特殊文件夹的路径。
GetTempName 返回一个随机生成的文件或文件夹。
MoveFile 从一个位置向另一个位置移动一个或多个文件。
MoveFolder 从一个位置向另一个位置移动一个或多个文件夹。
OpenTextFile 打开文件,并返回一个用于访问此文件的 TextStream 对象。

18.ASP ASPError对象

ASPError 对象用于显示在 ASP 文件的脚本中发生的任何错误的详细信息。

ASP ASPError 对象

ASP 3.0 提供这个对象,且在 IIS5 及更高版本中可用。

ASPError 对象用于显示在 ASP 文件的脚本中发生的任何错误的详细信息。当 Server.GetLastError 被调用时,ASPError 对象就会被创建,因此只能通过使用 Server.GetLastError 方法来访问错误信息。

ASPError 对象的属性描述如下(所有属性都是可读的):

注释:下面的属性只能 Server.GetLastError() 方法来访问。

属性

属性 描述
ASPCode 返回由 IIS 生成的错误代码。
ASPDescription 返回有关错误的详细信息。(假如错误和 ASP 相关。)
Category 返回错误来源。(是由 ASP、脚本语言还是对象引起的?)
Column 返回在出错文件中的列位置。
Description 返回关于错误的简短描述。
File 返回出错 ASP 文件的文件名。
Line 返回错误所在的行数。
Number 返回关于错误的标准 COM 错误代码。
Source 返回错误所在行的实际的源代码

17.ASP Server对象

Server 对象

ASP Server 对象的作用是访问有关服务器的属性和方法。其属性和方法描述如下:

属性

属性 描述
ScriptTimeout 设置或返回在一段脚本终止前它所能运行时间(秒)的最大值。

方法

方法 描述
CreateObject 创建对象的实例(instance)。
Execute 从另一个 ASP 文件中执行一个 ASP 文件。
GetLastError() 返回可描述已发生错误状态的 ASPError 对象。
HTMLEncode 将 HTML 编码应用到某个指定的字符串。
MapPath 将一个指定的地址映射到一个物理地址。
Transfer 把一个 ASP 文件中创建的所有信息传输到另一个 ASP 文件。
URLEncode 把 URL 编码规则应用到指定的字符串。

16.ASP Session对象

Session 对象

当您正在操作一个应用程序时,您会启动它,然后做些改变,随后关闭它。这个过程很像一次对话(Session)。计算机知道你是谁。它也知道你在何时启动和关闭这个应用程序。但是在因特网上,问题出现了:web 服务器不知道你是谁,也不知道你做什么,这是由于 HTTP 地址无法留存状态(信息)。

ASP 通过为每个用户创一个唯一的 cookie 解决了这个问题。cookie 发送到服务器,它包含了可识别用户的信息。这个接口称作 Session 对象。

Session 对象用于存储关于某个用户会话(session)的信息,或者修改相关的设置。存储在 session 对象中的变量掌握着单一用户的信息,同时这些信息对于页面中的所有页面都是可用的。存储于 session 变量中的信息通常是 name、id 以及参数等。服务器会为每位新用户创建一个新的 Session 对象,并在 session 到期后撤销这个对象。

下面是 Session 对象的集合、属性、方法以及事件:

集合

集合 描述
Contents 包含所有通过脚本命令追加到 session 的条目。
StaticObjects 包含了所有使用 HTML 的 <object> 标签追加到 session 的对象。

属性

属性 描述
CodePage 规定显示动态内容时使用的字符集
LCID 设置或返回指定位置或者地区的一个整数。诸如日期、时间以及货币的内容会根据位置或者地区来显示。
SessionID 为每个用户返回一个唯一的 id。此 id 由服务器生成。
Timeout 设置或返回应用程序中的 session 对象的超时时间(分钟)。

方法

方法 描述
Abandon 撤销一个用户的 session。
Contents.Remove 从 Contents 集合删除一个项目。
Contents.RemoveAll() 从 Contents 集合删除全部项目。

事件

事件 描述
Session_OnEnd 当一个会话结束时此事件发生。
Session_OnStart 当一个会话开始时此事件发生。

15.ASP Application对象

在一起协同工作以完成某项任务的一组 ASP 文件称为一个应用程序。而 ASP 中的 Application 对象的作用是把这些文件捆绑在一起。

Application 对象

Web 上的一个应用程序可以是一组 ASP 文件。这些 ASP 在一起协同工作来完成一项任务。而 ASP 中的 Application 对象的作用是把这些文件捆绑在一起。

Application 对象用于存储和访问来自任意页面的变量,类似 Session 对象。不同之处在于所有的用户分享一个 Application 对象,而 session 对象和用户的关系是一一对应的。

Application 对象掌握的信息会被应用程序中的很多页面使用(比如数据库连接信息)。这就意味我们可以从任意页面访问这些信息。也意味着你可以在在一个页面上改变这些信息,随后这些改变会自动地反映到所有的页面中。

Application 对象的集合、方法和事件的描述如下:

集合

集合 描述
Contents 包含所有通过脚本命令追加到应用程序中的项目。
StaticObjects 包含所有使用 HTML 的 <object> 标签追加到应用程序中的对象。

方法

方法 描述
Contents.Remove 从 Contents 集合中删除一个项目。
Contents.RemoveAll() 从 Contents 集合中删除所有的项目。
Lock 防止其余的用户修改 Application 对象中的变量。
Unlock 使其他的用户可以修改 Application 对象中的变量(在被 Lock 方法锁定之后)。

事件

事件 描述
Application_OnEnd 当所有用户的 session 都结束,并且应用程序结束时,此事件发生。
Application_OnStart 在首个新的 session 被创建之前(这时 Application 对象被首次引用),此事件会发生。

14.ASP Request对象

Request 对象

当浏览器向服务器请求页面时,这个行为就被称为一个 request(请求)。

ASP Request 对象用于从用户那里获取信息。它的集合、属性和方法描述如下:

集合

集合 描述
ClientCertificate 包含了在客户证书中存储的字段值
Cookies 包含了 HTTP 请求中发送的所有 cookie 值
Form 包含了使用 post 方法由表单发送的所有的表单(输入)值
QueryString 包含了 HTTP 查询字符串中所有的变量值
ServerVariables 包含了所有的服务器变量值

属性

属性 描述
TotalBytes 返回在请求正文中客户端所发送的字节总数

方法

方法 描述
BinaryRead 取回作为 post 请求的一部分而从客户端送往服务器的数据,并把它存放到一个安全的数组之中。

13.ASP Response对象

Response 对象

ASP Response 对象用于从服务器向用户发送输出的结果。它的集合、属性和方法如下:

集合

集合 描述
Cookies 设置 cookie 的值。假如不存在,就创建 cookie ,然后设置指定的值。

属性

属性 描述
Buffer 规定是否缓存页面的输出。
CacheControl 设置代理服务器是否可以缓存由 ASP 产生的输出。
Charset 将字符集的名称追加到 Response 对象中的 content-type 报头。
ContentType 设置 Response 对象的 HTTP 内容类型。
Expires 设置页面在失效前的浏览器缓存时间(分钟)。
ExpiresAbsolute 设置浏览器上页面缓存失效的日期和时间。
IsClientConnected 指示客户端是否已从服务器断开。
Pics 向 response 报头的 PICS 标志追加值。
Status 规定由服务器返回的状态行的值。

方法

方法 描述
AddHeader 向 HTTP 响应添加新的 HTTP 报头和值。
AppendToLog 向服务器记录项目(server log entry)的末端添加字符串。
BinaryWrite 在没有任何字符转换的情况下直接向输出写数据。
Clear 清除已缓存的 HTML 输出。
End 停止处理脚本,并返回当前的结果。
Flush 立即发送已缓存的 HTML 输出。
Redirect 把用户重定向到另一个 URL。
Write 向输出写指定的字符串。

12.ASP使用CDOSYS发送电子邮件

CDOSYS 是 ASP 中的内置组件。此组建用于通过 ASP 来发送电子邮件。

使用 CDOSYS 发送电子邮件

CDO (Collaboration Data Objects) 是一项微软的技术,设计目的是用来简化通信程序的创建。

CDOSYS 是 ASP 中的内置组件。我们会向您展示如何使用该组件来发送电子邮件。

CDONTs 怎么样?

微软已经在 Windows 2000、Windows XP 以及 Windows 2003 中淘汰了 CDONTs。如果您还在应用程序中使用 CDONTs,就需要更新代码,并使用新的 CDO 技术。

使用 CDOSYS 的实例

发送电子邮件:

<%
Set myMail=CreateObject("CDO.Message")
myMail.Subject="Sending email with CDO"
myMail.From="mymail@mydomain.com"
myMail.To="someone@somedomain.com"
myMail.TextBody="This is a message."
myMail.Send
set myMail=nothing
%>

发送带有 Bcc 和 CC 字段的文本邮件:

<%
Set myMail=CreateObject("CDO.Message")
myMail.Subject="Sending email with CDO"
myMail.From="mymail@mydomain.com"
myMail.To="someone@somedomain.com"
myMail.Bcc="someoneelse@somedomain.com"
myMail.Cc="someoneelse2@somedomain.com"
myMail.TextBody="This is a message."
myMail.Send
set myMail=nothing
%>

发送 HTML 邮件:

<%
Set myMail=CreateObject("CDO.Message")
myMail.Subject="Sending email with CDO"
myMail.From="mymail@mydomain.com"
myMail.To="someone@somedomain.com"
myMail.HTMLBody = "<h1>This is a message.</h1>" 
myMail.Send
set myMail=nothing
%>

发送一封发送来自网站的网页的 HTML 邮件:

<%
Set myMail=CreateObject("CDO.Message")
myMail.Subject="Sending email with CDO"
myMail.From="mymail@mydomain.com"
myMail.To="someone@somedomain.com"
myMail.CreateMHTMLBody "http://www.w3school.com.cn/asp/" 
myMail.Send
set myMail=nothing
%>

发送一封发送来自电脑中文件的网页的 HTML 邮件:

<%
Set myMail=CreateObject("CDO.Message")
myMail.Subject="Sending email with CDO"
myMail.From="mymail@mydomain.com"
myMail.To="someone@somedomain.com"
myMail.CreateMHTMLBody "file://c:/mydocuments/test.htm" 
myMail.Send
set myMail=nothing
%>

发送一封带有附件的电子邮件:

<%
Set myMail=CreateObject("CDO.Message")
myMail.Subject="Sending email with CDO"
myMail.From="mymail@mydomain.com"
myMail.To="someone@somedomain.com"
myMail.TextBody="This is a message."
myMail.AddAttachment "c:\mydocuments\test.txt"
myMail.Send
set myMail=nothing
%>

使用远程服务器发送一封文本邮件:

<%
Set myMail=CreateObject("CDO.Message")
myMail.Subject="Sending email with CDO"
myMail.From="mymail@mydomain.com"
myMail.To="someone@somedomain.com"
myMail.TextBody="This is a message."
myMail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing")=2
'远程 SMTP 服务器的 IP 或名称
myMail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") _
="smtp.server.com"
'服务器端口
myMail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") _
=25 
myMail.Configuration.Fields.Update
myMail.Send
set myMail=nothing
%>

11.ASP Global.asa

Global.asa 文件是一个可选的文件,它可包含可被 ASP 应用程序中每个页面访问的对象、变量以及方法的声明。

Global.asa 文件

Global.asa 文件是一个可选的文件,它可包含可被 ASP 应用程序中每个页面访问的对象、变量以及方法的声明。所有合法的浏览器脚本都能在 Global.asa 中使用。

Global.asa 文件可包含下列内容:

  • Application 事件
  • Session 事件
  • <object> 声明
  • TypeLibrary 声明
  • #include 指令

注释:Global.asa 文件须存放于 ASP 应用程序的根目录中,且每个应用程序只能有一个 Global.asa 文件。

Global.asa 中的事件

在 Global.asa 中,我们可以告知 application 和 session 对象在启动和结束时做什么事情。完成这项任务的代码被放置在事件操作器中。Global.asa 文件能包含四种类型的事件:

Application_OnStart – 此事件会在首位用户从 ASP 应用程序调用第一个页面时发生。此事件会在 web 服务器重起或者 Global.asa 文件被编辑之后发生。”Session_OnStart” 事件会在此事件发生之后立即发生。

Session_OnStart – 此事件会在每当新用户请求他或她的在 ASP 应用程序中的首个页面时发生。

Session_OnEnd – 此事件会在每当用户结束 session 时发生。在规定的时间(默认的事件为 20 分钟)内如果没有页面被请求,session 就会结束。

Application_OnEnd – 此事件会在最后一位用户结束其 session 之后发生。典型的情况是,此事件会在 Web 服务器停止时发生。此子程序用于在应用程序停止后清除设置,比如删除记录或者向文本文件写信息。

Global.asa 文件可能类似这样:

<script language="vbscript" runat="server">

sub Application_OnStart
  'some code
end sub

sub Application_OnEnd
  'some code
end sub

sub Session_OnStart
  'some code
end sub

sub Session_OnEnd
  'some code
end sub

</script>

注释:由于无法使用 ASP 的脚本分隔符 (<% 和 %>) 在 Global.asa 文件中插入脚本,我们需使用 HTML 的 <script> 元素。

<object> 声明

可通过使用 <object> 标签在 Global.asa 文件中创建带有 session 或者 application 作用域的对象。

注释:<object> 标签应位于 <script> 标签之外。

语法:

<object runat="server" scope="scope" id="id"
{progid="progID"|classid="classID"}>
....
</object>
参数 描述
scope 设置对象的作用域(作用范围)(Session 或者 Application)。
id 为对象指定一个唯一的 id。
ProgID 与 ClassID 关联的 id。ProgID 的格式是:[Vendor.]Component[.Version]。ProgID 或 ClassID 必需被指定。
ClassID 为 COM 类对象指定唯一的 id。ProgID 或 ClassID 必需被指定。

实例

第一个实例创建了一个名为 “MyAd” 且使用 ProgID 参数的 session 作用域对象:

<object runat="server" scope="session" id="MyAd" progid="MSWC.AdRotator">
</object>

第二个实例创建了名为 “MyConnection” 且使用 ClassID 参数的

<object runat="server" scope="application" id="MyConnection"
classid="Clsid:8AD3067A-B3FC-11CF-A560-00A0C9081C21">
</object>

在此 Global.asa 文件中声明的这些对象可被应用程序中的任何脚本使用。

GLOBAL.ASA:

<object runat="server" scope="session" id="MyAd" progid="MSWC.AdRotator">
</object>

您可以从 ASP 应用程序中的任意页面引用此 “MyAd” 对象:

某个 .ASP 文件:

<%=MyAd.GetAdvertisement("/banners/adrot.txt")%>

TypeLibrary 声明

TypeLibrary (类型库)是一个容器,其中装有对应于 COM 对象的 DLL 文件。通过在 Global.asa 中包含对 TypeLibrary 的调用,可以访问 COM 对象的常量,同时 ASP 代码也能更好地报告错误。假如您的站点的应用程序依赖于已在类型库中声明过数据类型的 COM 对象,您可以在 Global.asa 中对类型库进行声明。

语法:

<!--METADATA TYPE="TypeLib"
file="filename"
uuid="typelibraryuuid"
version="versionnumber"
lcid="localeid"
-->
参数 描述
file 规定指向类型库的绝对路径。参数 file 或者 uuid,两者缺一不可。
uuid 规定了针对类型库的唯一的标识符。参数 file 或者 uuid,两者缺一不可。
version 可选。用于选择版本。假如没有找到指定的版本,将使用最接近的版本。
lcid 可选。用于类型库的地区标识符。

错误值

服务器会返回以下的错误消息之一:

错误 代码 描述
ASP 0222 Invalid type library specification
ASP 0223 Type library not found
ASP 0224 Type library cannot be loaded
ASP 0225 Type library cannot be wrapped

注释:METADATA 标签可位于 Global.asa 文件中的任何位置(在 <script> 标签的内外均可)。不过,我们还是推荐将 METADATA 标签放置于 Global.asa 文件的顶部。

限定

关于可以在 Global.asa 文件中引用的内容的限定:

你无法显示 Global.asa 文件中的文本。此文件无法显示信息。

你只能在 Application_OnStart 和 Application_OnEnd 子例程中使用 Server 和 Application 对象。在 Session_OnEnd 子例程中,你可以使用 Server、Application 和 Session 对象。在 Session_OnStart 子例程中,你可使用任何内建的对象。

如何使用子例程

Global.asa 常用于对变量进行初始化。

下面的例子展示如何检测访问者首次到达站点的确切时间。时间存储在名为 “started” 的 Session 对象中,并且 “started” 变量的值可被应用程序中的任何 ASP 页面访问:

<script language="vbscript" runat="server">
sub Session_OnStart
Session("started")=now()
end sub
</script>

Global.asa 也可用于控制页面访问。

下面的例子展示如何把每位新的访问者重定向到另一个页面,在这个例子中会定向到 “newpage.asp” 这个页面:

<script language="vbscript" runat="server">
sub Session_OnStart
Response.Redirect("newpage.asp")
end sub
</script>

我们还可以在 Global.asa 中包含函数。

在下面的例子中,当 Web 服务器启动时,Application_OnStart 子例程也会启动。随后,Application_OnStart 子例程会调用另一个名为 “getcustomers” 的子例程。”getcustomers” 子例程会打开一个数据库,然后从 “customers” 表中取回一个记录集。此记录集会赋值给一个数组,在不查询数据库的情况下,任何 ASP 页面都能够访问这个数组:

<script language="vbscript" runat="server">

sub Application_OnStart
getcustomers
end sub

sub getcustomers 
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/webdata/northwind.mdb"
set rs=conn.execute("select name from customers")
Application("customers")=rs.GetRows
rs.Close
conn.Close
end sub

</script>

Global.asa 实例

在这个例子中,我们要创建一个可计算当前访客的 Global.asa 文件。

Application_OnStart 设置当服务器启动时,Application 变量 “visitors” 的值为 0。

每当有新用户访问时,Session_OnStart 子例程就会给变量 “visitors” 加 1。

每当 Session_OnEnd 子例程被触发时,此子例程就会从变量 “visitors” 减 1。

Global.asa 文件:

<script language="vbscript" runat="server">

Sub Application_OnStart
Application("visitors")=0
End Sub

Sub Session_OnStart
Application.Lock
Application("visitors")=Application("visitors")+1
Application.UnLock
End Sub

Sub Session_OnEnd
Application.Lock
Application("visitors")=Application("visitors")-1
Application.UnLock
End Sub

</script>

此 ASP 文件会显示当前用户的数目:

<html>
<head>
</head>
<body>
<p>There are <%response.write(Application("visitors"))%> online now!</p>
</body>
</html>

10.ASP文件引用

#include 指令用于在多重页面上创建需重复使用的函数、页眉、页脚或者其他元素等。

#include 指令

通过使用 #include 指令,我们可以在服务器执行 ASP 文件之前,把另一个ASP文件插入这个文件中。#include 命令用于在多个页面上创建需要重复使用的函数、页眉、页脚或者其他元素等。

如何使用 #include 指令

这里有一个名为 “mypage.asp” 的文件:

<html> 
<body> 
<h2>Words of Wisdom:</h2>
<p><!--#include file="wisdom.inc"--></p> 
<h2>The time is:</h2>
<p><!--#include file="time.inc"--></p>
</body> 
</html>

这是 “wisdom.inc” 文件:

"One should never increase, beyond what is necessary,
the number of entities required to explain anything."

这是 “time.inc” 文件:

<%
Response.Write(Time)
%>

在浏览器中查看的源代码应该类似这样:

<html>
<body>
<h2>Words of Wisdom:</h2>
<p>"One should never increase, beyond what is necessary,
the number of entities required to explain anything."</p>
<h2>The time is:</h2>
<p>11:33:42 AM</p>
</body>
</html>

Including 文件的语法:

如需在 ASP 中引用文件,请把 #include 命令置于注释标签之中:

<!--#include virtual="somefilename"-->

或者:

<!--#include file ="somefilename"-->

关键词 Virtual

关键词 virtual 指示路径以虚拟目录开始。

如果 “header.inc” 文件位于虚拟目录 /html 中,下面这行代码会插入文件 “header.inc” 中的内容:

<!-- #include virtual ="/html/header.inc" -->

关键词 File

关键词 File 指示一个相对的路径。相对路径起始于含有引用文件的目录。

假设文件位于 html 文件夹的子文件夹 headers 中,下面这段代码可引用 “header.inc” 文件的内容:

<!-- #include file ="headers\header.inc" -->

注意:被引用文件的路径是相对于引用文件的。假如包含 #include 声明的文件不在 html 目录中,这个声明就不会起效。

您也可以使用关键词 file 和语法 (..\) 来引用上级目录中的文件。

提示和注释

在上面的一节中,我们使用 “.inc” 来作为被引用文件的后缀。注意:假如用户尝试直接浏览 INC 文件,这个文件中内容就会暴露。假如被引用的文件中的内容涉及机密,那么最好还是使用 “asp” 作为后缀。ASP 文件中的源代码被编译后是不可见的。被引用的文件也可引用其他文件,同时一个 ASP 文件可以对同一个文件引用多次。

重要事项:在脚本执行前,被引用的文件就会被处理和插入。

下面的代码无法执行,这是由于 ASP 会在为变量赋值之前执行 #include 命令:

<%
fname="header.inc"
%>
<!--#include file="<%=fname%>"-->

不能在脚本分隔符之间包含文件引用:

<%
For i = 1 To n
  <!--#include file="count.inc"-->
Next
%>

但是这段脚本可以工作:

<% For i = 1 to n %>
<!--#include file="count.inc" -->
<% Next %>