日期:2013-10-14  浏览次数:20862 次

1. ASP

1.1. 简介

Microsoft® Active Server Pages (ASP) 是服务器端脚本环境,可用来创建交互式 Web 页并建立强大的 Web 应用程序。我们可以采用VBScript和JScript来创建服务器端脚本,也可以内嵌到HTML中,使得编程更为方便,同时可以调用COM组件(如访问数据库的ADO等),这样ASP的功能可以无限地扩增。

服务器上安装IIS后,可以访问http://localhost/iishelp/来访问关于IIS的帮助,其中涵盖了ASP编程指南,所以我们仅对自学难点加以阐述,帮助您达到速成的目的。


(图1.1-1)

  ASP不是语言,它是一种环境,具体编程还需要使用VBScript、Jscript等脚本语言。本文示例中除非特殊说明,否则默认采用VBScript。

1.2. 内置对象

尽管在Microsoft提供的资料中会有其他的内置对象,但对于我们来说只要掌握Application、Session、Server、Request和Response五个对象就足够了。学习前,首先对B/S模式作简单介绍,B/S是浏览器(Browser)/服务器(Server)的缩写形式,是一种特殊的客户端(Client)/服务器(Server)模式,客户端主要通过两种方式访问服务器,一种是发送URL地址到服务器,一种是通过已有的HTML页面填写表单提交到服务器;服务器需要做的就是根据得到的客户端信息返回结果—通常就是HTML页面。

  如果您做过Socket开发和DLL开发,希望图1.2-1能帮助你了解ASP。


可以不严格的说,ASP中全局内存访问是通过Application对象实现的,服务器资源访问是通过Server对象实现的(Server对象CreateObject方法可以创建COM对象,从而访问更多服务器资源),客户端代理中私有内存通过Session进行管理,接收的数据相对于服务器来说,就是客户端的请求信息(Request对象),发送数据就是服务器对客户端的响应(Response对象实现)。

注意:千万不要总是徘徊在“为什么”中,“到底怎样接收数据”,“到底怎样发送数据”等等,这些过程不需要了解,你可以认为数据就是放在那里的。

1.2.1. Application对象

1.2.1.1. 集合

Application有两个子集合Contents和StaticObjects,一般情况下StaticObjects能实现的事情通过Contents都可以实现,所以我们了解Contents就足够了。

Contents集合中的内容相当于一个语言中的变量名与其值的对应。比如我想记录所有在线人员的个数(UserCount),我们可以这样赋值:

Application.Contents(“UserCount”)=0

或者

Application.Contents(“UserCount”)=Application.Contents(“UserCount”)+1

通常情况下,我们把Application.Contents(…)替换为Application(…),ASP中这是允许的。所以Application.Contents(“UserCount”)将变为Application(“UserCount”)。你可以把Application(“UserCount”)整个部分视为一个变量。

集合Contents有两个方法:Remove及RemoveAll,通过字面即可理解含义,不再赘述。

1.2.1.2. 方法

  Lock和Unlock是Application对象提供的两个方法,由于Application使用的是公共的内存,当多个客户端同时访问时就必然会造成冲突,Lock和Unlock就很好的解决了这个问题,写入Application变量前首先调用Application.Lock锁定公共内存,等写入完毕再调用Application.Unlock释放锁定,使你的程序很简单就可以避免多用户访问的问题。

1.2.1.3. 事件

关于Application的事件Application_OnStart及Application_OnEnd请参照Global.asa节有关介绍。

1.2.1.4. 应用

Application对象的内容存放在公共内存区域中,对于所有客户端代理而言皆是完全访问的。公共的事物适合做公共的事情,比如计数器和一些公共对象。

1.2.2. Session对象

1.2.2.1. 集合

Contents和StaticObjects集合是Session中重要组成部分,可以通过调用Session.Contents,来定义Session级的变量,如Session.Contents(“UserLevel”),也可写作Session(“UserLevel”),我们通常也把Session(“UserLevel”)这一部分作为一个变量看待。

其他略。

1.2.2.2. 属性

常用的属性有两个,一个是SessionID,一个是Timeout。

SessionID在一次Web服务运行周期内,唯一标识一个客户端。需要注意的是“一次服务运行周期”,如果重起Web服务,SessionID将极大可能与重起前某次的SessionID相同,所以千万不要用SessionID作为数据库表中主关键字。

Timeout表示在客户端多长时间没有刷新或发送请求后,服务器将认为其Session已结束,单位为“分钟”,IIS5.0中默认为10分钟。Session.Timeout时间后,将触发Session_OnEnd事件。设置此属性的根本原因是由于http协议造成的,每次浏览器向服务器发送请求后,就立即断开,但服务器需要在一定时间内保留客户端的连接信息,如果用户超过一定时间(Timeout的值)没有刷新,发送请求或者直接关闭了浏览器,服务器需要把这个客户端的Session信息删除。想象一下,如果Session信息用不删除,服务器终究会内存不足,然后造成系统崩溃。这也是DoS攻击的简单原理。所以,Timeout属性值的大小必须根据实际情况设置合适的值。

1.2.2.3. 方法

  如果说设置Session.Timeout是为了被动的删除没有用的客户端信息,Session.Abandon就是主动删除没有用的客户端信息,且将主动触发Session_OnEnd事件。在Internet中,用您自己的账号登录一个网站后,通常会有“退出登录”的功能,而且网站一般都建议您通过点击“退出登录”来退出而不是简单的关闭浏览器。“退出登录”通常的实现就是删除当前账号的登录信息(可能包含数据库中的信息或者存储文件中的信息),以防被人盗用。

1.2.2.4. 事件

  Session_OnStart和Session_OnEnd事件参见Global.asa节。

1.2.2.5. 应用

  Session的特点就是私有性,所以开发者通常用来存放登录用户的私有信息,如权限、级别等信息。

1.2.3. Server对象

1.2.3.1. 属性

Server对象仅有一个属性ScriptTimeout,用来设置脚本的最长运行时间,否则将被中断。设置单位为秒,默认值为90秒。

Server.ScriptTimeout与IIS管理对象中的元数据(Metabase)相互影响,其时间值将取两者之间的最大值。

1.2.3.2. 方法

  关于Execute和GetLastError方法请查阅相关资料。

1.2.3.2.1. CreateObject

ASP对于服务器的访问能力几乎全部从Server.CreateObject扩展,如对目录文件系统的访问,可以创建Scripting.FileSystemObject对象,如数据库连接可以创建ADODB.Connection对象等等。当然您也可以开发自己的COM对象,比如加密、文件上载,或者隐藏的业务逻辑等等。

服务器组件中如果包含OnStartPage和OnEndPage的实现,那么创建服务器组件时OnStartPage将被执行。

例如,创建文件系统对象FileSystemObject:

Set fso = Server.Cr