基于B/S模式创建“创新基金地方(北京)分系统管理模块及接口”设计与探索一、认识ASP(一)ASP的特点ASP的全称是ActiveServerPages,它提供了一种服务器端脚本编写环境和服务器端执行指令的环境,是用附加特性扩展了的标准的HTML文件。使用ASP可以创建和运行动态、交互的Web服务器应用程序。ASP可以将脚本命令(包含服务器端和客户端两种)、ActiveX组件、Java小程序、闪烁文本等嵌入HTML页而创建交互式的Web页和基于Web的功能强大的应用程序。ASP页面可以使用脚本语言(如JavaScript、VBScript、Perl)编写,程序代码隐藏,输出到用户浏览器的只是动态的HTML文件,而且毫无浏览器兼容问题。用户只需经过简单的学习就可以编写出一个好的Web应用程序。访问数据库轻松容易。通过使用内置的ASP组件ADO,ASP页面可以通过ODBC存取数据库,并将结果返回给用户的浏览器。##2(二)ASP的运行环境ASP的执行环境在服务器端,但并不是任何服务器都可以执行ASP。ASP需要Microsoft的IIS(Internet信息服务器)的支持。并根据不同的操作系统安装相应的IIS服务器后,进行配置。可以是WindowsNT+IIS4.0、Windows2000+IIS5.0和Windows98+PWS之一。二、ASP的对象和组件(一)ActiveServerPages对象ActiveServerPages包含六大内置对象。这些对象使用户可扩展脚本功能。利用这六个内部对象,可以设计出功能强大的ASP应用程序。例如可用这些对象访问浏览器请求并控制对请求的响应。1.Application对象——用来存储、读取用户共享的应用程序信息,如可以用此对象在网站的用户间传送信息。(如^00100012a^)2.Request对象——从客户端取得信息。可用来访问从浏览器发送到服务器的请求信息,可用此对象读取已输入HTML表单的信息。(如^00100012b^)3.Response对象——将信息送到客户端。用来向浏览器回发信息,可用此对象从脚本向浏览器发送输出。(如^00100012c^)4.Server对象——提供一些Web服务器工具。Server对象最强有力之处,在于通过它,你可以和Web服务器进行交互。(如^00100012d^)5.Session对象——储存在一个Session内的用户信息,该信息只能被该用户访问,如可存储用户对网站的访问信息。(如^00100012e^)6.ObjectContext对象——可用来配合MicrosoftTransactionServer(MTS)服务器控制ASP事务。(如^00100012f^)(二)ASP内置组件ActiveX组件与ASP内置对象相似。但使用ActiveServerPages时,二者有重要区别。组件在使用前必须明确创建。同前面讨论的内置对象一样,ActiveServerPages组件也可以扩展脚本功能。组件与对象的不同在于其主要用于专门任务。以下给出了捆绑在ActiveServerPages上的一些组件简介。AdRotator组件——用来在网站的网页上显示横幅广告。可用此组件规定不同横幅广告的显示频率。BrowserCapabilities组件——根据不同浏览器性能显示不同HTML内容。如可用此组件对与框架兼容的浏览器显示带框架的网页。ContentLinking组件——用来链接不同的HTML页面使其操作更简单。如用此组件显示在线书籍的页面。Counters组件——跟踪网站访问者的数量。可用此组件向特定网页添加计数器。ContentRotator组件——可在页面上通过HTML的内容旋转。如用此组件随机显示网站主页的不同公告。PageCounter组件——在向特定页面添加计数器和跟踪访问者数量方面与Counters组件完全一样。PermissionChecker组件——可只对被允许的用户显示网页的链接,并可用此组件创建只面向网站管理人员的网页。CollaborationDataObjects(CDO)——可在ActiveServerPages中发送或读取email。新用户在网站注册后,可用这些对象向其发送email。ActiveXDataObjects(ADO)——用来在MicrosoftSQLServer等数据库中读取或存储数据。(三)ADO、数据库与ASP在目前的站点设计中,越来越多的使用到了数据库技术。通过数据库,可以使站点的风格更为多样、灵活,内容更为丰富。我们在前面已经讲到ASP通过ADO,ADO再通过ODBC访问数据库获得数据信息,然后再返回结果送到客户端浏览器。ADO(ActiveXDataObjects)支持Web程序开发人员可以通过Internet存取数据库,即可以在客户端在线实现对数据库的访问、即时更新等操作。这样的结果是使得Web站点与数据库的集成更为紧密。ADO可以在任何支持COM以及OLE的服务器端操作系统上使用。但数据库是各种各样的,要实现对所有数据库的存取,就要用到ODBC,通过ODBC驱动程序,ADO就可以兼容各种数据库系统,包括Microsoft自身的Access、FoxPro、SQLServer以及Oracle、Informix、Sybase等公司的数据库服务器,而且具有统一的处理界面。比如在Windows98的“控制面板”中就有一个“ODBC数据源(32位)”,读者可以从中看到自己的系统安装了哪些ODBC驱动程序。在ASP中主要的ADO对象有三个,分别是Connection、Command以及RecordSet,这三个对象又分别有一些子对象。Connection提供对数据库服务器的连接,在数据库与应用程序之间建立联系,然后再将Recordset和Command对象来查询、请求、增加或更新数据。Command对象的主要作用是进行数据库的查询。其工作方法是将采用SQL标准的查询语句指定到Command对象的CommandString属性,然后执行查询动作,数据库服务器响应后,将查询结果存储在Recorset对象中供用户使用。Recordset对象存储了从数据库中取得的符合查询条件的数据集合。Web页面开发人员再通过ASP页面中的脚本对其加以处理、分析,然后显示在客户端的浏览器上。这三个对象的一般语法格式如下:Setrs=CreateObject(″ADODB.Recordset″)Setconn=CreateObject(″ADODB.Connection″)Setcm=CreateObject(″ADODB.Command″)而对数据库的ODBC方法连接,一般采用系统DSN(DATASourceName)和文件DSN两种方式。根据笔者在实际开发工作中的经验,连接到MicrosoftSQLServer7.0是采用的系统DSN,而对于MicrosoftAccess据库则是采用的文件DSN,这与连接信息的存储位置相对应。下面例子中的脚本用系统DSN打开了一个对数据库的连接:%SetConn=Server.CreateObject(″ADODB.Connection″)Conn.Open″DSN=ShopDSN;UID=sa;PWD=;DATABASE=OnlineShop″%此脚本用CreateObject方法创建了一个ADOConnection对象实例,然后通过输入有4个参数(系统DSN、用户ID、密码和数据库名)的连接字符串打开Connection对象。执行此脚本之前,必须在Windows中创建SystemDSN。下面是步骤:1.启动ODBC数据资源管理器。此程序位于Windows控制面板,标有ODBC数据源(32位)。2.在ODBC数据资源管理器中,选择标有“系统DSN”的一项。3.单击“添加”,选择SQLServerDriver,单击“完成”。4.输入一个名称(如ShopDSN)和描述,选择要连接的服务器。若SQLServer与IIS位于同一台机器上,则选择Local,否则输入网络上该服务器的IP地址或域名,选择“下一步”。5.选择授权方法。6.最后是新连接的测试。创建了数据源后,我们就可以综合利用上面提到的三种对象来访问数据库了。如下面的脚本范例:%Setrs=Server.CreateObject(ADODB.Recordset)rs.OpenSelect*fromproducts,DSN=ShopDSN%在这个范例中,“Select*fromproducts”就是使用字符串表示的Command对象,而“DSN=ShopDSN”是字符串所表示的Connection对象,它告诉服务器端的Connection对象所需连接的ODBC数据库数据源名称,即是我们上面新建的ShopDSN。Recordset对象有17种属性,19种方法。Connection对象有10种属性,6种方法。Command对象有5种属性和2种方法。决定了采用的数据库后,就要考虑数据库结构的设计,如应该创建哪些表、哪些字段?例如:表News:最新资讯表主要由消息自动编号、消息标题、消息内容、消息插图、发布时间等字段组成。表的定义从略。'%SetConn=Server.CreateObject(″ADODB.Connection″)Connstr=″DBQ=″+server.mappath(″database/cpcwshop.mdb″)+″;DefaultDir=;DRIVER={MicrosoftAccessDriver(*.mdb)};DriverId=25;FILE=MSAccess;ImplicitCommitSync=Yes;MaxBufferSize=512;MaxScanRows=8;PageTimeout=15;SafeTransactions=0;Threads=3;UserCommitSync=Yes;″Conn.Openconnstr%(二)文件列表及组成通过前面的介绍,我们已经知道ASP可以象C一样支持Include语法,即可以包含多个外部文件。因此,对于多个页面都要调用的一段相对独立的代码,我们都可以将它们包含在.inc文件里。如上面创建的用于数据库连接的shopdsn.inc。下面则是相应的源代码:程序清单1.Header.inc包含文件Header.inc包含在每个页面的起始处,header.inc所能进行的事务有:(1)建立并使用ADO的Connection对象连接到商店数据库;(2)获得Name变量的值,这是用来设置head标签中的页面标题的,也是用于首页中显示欢迎信息的。取值方法说明如下:在服务器的目录中有一个contents.txt的文本文件,其内容只有一行,此值即是数据库中contents表的Name的值,我们先采用VBScript的Scripting.FileSystemObject对象打开该文本文件取值,再通过ADO对数据库的访问操作,因此,实际上这种方法预留了一种扩展功能,2.Footer.inc与包含文件Header.inc一样,是为统一界面风格出现的。Footer.inc的包含指令是放在每个页面的/body和html标签之前的。主要包含站点的版权声明和一组主要页面的链接。3.Menu.inc包含文件Menu.inc实际是将包含文件Footer.inc中的有关商店主要页面链接的重新布局,Menu.inc将作为包含文件出现在商店的首页中。采用包含文件的方法,主要是便于更新商店的显示风格。即,如果读者如果需要改变Menu中的图片或颜色,只要更新Menu.inc就可以了,而不必对整个default.asp文件进行手术。4.Content.inc包含文件Content.inc用于显示首页的正文。这是主要通过前面header.inc传来的Session(″contents″)对表contents进行存取。结合ASP,我们需要做的就是先设计一个表格,然后将从数据库中读出来的值填到表格中