Active Server Pages教程
二零零零年二月二日
目录
第一章引言 (3)
第二章简介 (8)
第三章ASP基础 (13)
第四章脚本基础 (19)
第五章脚本变量、函数、过程和条件语句 (22)
第六章脚本循环语句 (27)
第七章内建Request对象 (30)
第八章内建Reponse对象 (36)
第九章内建对象Application 和Session (42)
第十章Global.asa文件的使用及Chat程序 (48)
第十一章内建对象Server (53)
第十二章数据库查询语言(1) (57)
第十三章数据库查询语言(2) (62)
第十四章ActiveX组件 (66)
第十五章常用的ASP ActiveX组件 (70)
第十六章其它的ASP常用组件 (75)
第十七章ADO存取数据库时如何分页显示 (81)
第十八章堵住ASP漏洞 (87)
第十九章最新的ASP、IIS安全漏洞 (91)
第一章引言
您的网站是否仍一如既往地保持“静态”?目前呈几何增长的互联网网站中,有相当一部分仍固守“静态”,无形中已大大落后于时代的步伐。所谓“静态”指的就是网站的网页内容“固定不变”,当用户浏览器通过互联网的HTTP(Hypertext Transport Pr otocol)协议向WEB服务器请求提供网页内容时,服务器仅仅是将原已设计好的静态HTML文档传送给用户浏览器。其页面的内容使用的仅仅是标准的HTML代码,最多再加上流行的GIF89A格式的动态图片,比如产生几只小狗小猫跑来跑去的动画效果。若网站维护者要更新网页的内容,就必须手动地来更新其所有的HTML文档。
“静态”网站的致命弱点就是不易维护,为了不断更新网页内容,你必须不断地重复制作HTML文档,随着网站内容和信息量的日益扩增,你就会感到工作量大得出乎想象。
你不禁要问:那么什么是动态网站呢?这就是本文将重点讲述的核心,所谓“动态”,并不是指那几个放在网页上的GIF动态图片,在这里笔者为动态页面的概念制定了以下几条规则:
1、“交互性”即网页会根据用户的要求和选择而动态改变和响应,将浏览器作为客户端界面,这将是今后WEB发展的大事所趋。
2、“自动更新”即无须手动地更新HTML文档,便会自动生成新的页面,可以大大节省工作量。
3、“因时因人而变”,即当不同的时间、不同的人访问同一网址时会产生不同的页面,是不是很酷?
现在你已经对“动态”网站有了一个基本的概念,接下来应挑选称手的“兵刃”了。将网站“动态”化的方法很多,这要看你是出于何种需求。如果你是个人网站的维护者,使用的是免费主页空间,那么绝大多数情况下你只能使用Java、Java Script和最新的DHTML技术,如果你的主页空间提供者能给予你CGI权限或ASP支持,那么你将能非常幸运地发挥真正的动态技术。关于CGI和ASP技术将在后面的着重讨论,这里针对个人网站仅就最新的DHTML技术进行重点介绍。
究竟什么是DHTML?它与传统的HTML有什么不同?DHTML就是当网页从WEB服务器下载后无须再经过服务器的处理,而在浏览器中直接动态地更新网页的内容、排版样式、动画。
比如,当鼠标移至文章段落中,段落能够变成蓝色,或者当你点击一个超链后会自动生成一个下拉式的子超链目录。这就是Dynamic HTML(动态HTML),它是近年来网络飞速发展进程中最振奋人心也是最具实用性的创
新之一。它是一种通过各种技术的综合发展而得以实现的概念,这些技术包括Java Script , VB0Script, Document Object Model (文件目标模块),Layers
和Cascading Style Sheets ( CSS样式表)等。非常遗憾的是在网景Netscape
和微软IE浏览器几番大战后,我们仍没有得到一个对DHTML支持的统一标准。因此本文在介绍DHTML时不得不分别讲述。
让我们先来看看Microsoft IE 4对DHTML的支持:
1 .动态内容(Dynamic Content):动态地更新网页的内容,可"动态"地随时插入、修改、或删除网页的元件,譬如文字、标记等。
2 .动态排版样式(Dynamic Styles Sheets):通过W3C的“Cascading Style Sheets”(串联式排版样式,简称CSS1或CSS),提供了设定HTML标记的字体大小、字型、粗细、字型样式、行高度、文字颜色、加底线或加中间横线、与边缘距离、靠左右或置中、缩排、背景图片或颜色等排版功能。而“动态排版样式”,可以“动态”地随时地改变排版样式。
3 .动态定位(Dynamic Positioning):通过W 3 C的“Working Draft on Positioning HTML with Cascading Style Sheets”,提供HTML元件在X、Y、Z轴的定位功能,让设计者可以放置影像、控件、文字等在网页上的任何位置上。而放置在不同的Z轴上,设计者就可以产生重叠的效果。
4 .内建资料处理(Data Awareness):无须复杂的程序,无须花费服务器太多资源,即可让网页设计者即时处理文档。
5 .内建多媒体支援:IE 4.0结合CSS与内建的ActiveX Controls,提供多媒体支持的功能,包括转换特效、滤镜特效、路径控制、顺序控制、动画、制图、播放声音和影像等多媒体功能。
让我们再来看看Netscape Communicator 4.0对DHTML所提供的支持:
1 .动态排版样式(Dynamic Styles Sheets):支援W 3 C的“Cascading Style Sheets”(串联式排版样式,简称CSS1或CSS)、和自创的“Java Script Style Sheets”。
2 .Dynamic Layers:提供图文定位、改变图文重叠顺序、控制隐藏或显示图文、移动图文的功能,让您设计出“动画”的效果!
3 .Dynamic Fonts:提供由服务器下载字型的功能。
可见虽然IE 4.0和Netscape Communicator 4.0都提供了“Dynamic HTML”的支持,但是事实上两者除了对“Cascading Style Sheets”的规格相近外,其余都相差甚远。因此当你设计DHTML页面时必须充分考虑到兼容性的问题,选择称手的“兵刃”和方法对于设计者来说始终是最重要的。有关DHTML的使用方法和设计技巧作者将在第二章《动态网页设计十八般武艺》中仔细讲解,请密切关注。
或许对于一个个人网站来说充分运用DHTML技术足以令网页栩栩如生,动感十足。然而对于建立商业网站的企业而言,仅仅拥有DHTML是远远不够的。因为仅仅发生在客户浏览器端的动态效果是无法满足商业网站大
量信息查询,客户咨询,资源交互等“动态”需求的。因此作为商业网站的设计者,必须要设计出更具实用性和交互性的“动态”网站。由于绝大多数商业网站都具有大量的数据和信息,而建网的初衷也就是在于方便客户查询企业资料,方便同客户的交流,及时获得信息反馈。那么,就必然会面临如何让使用者在浏览器界面中,通过互联网或内联网(Intranet)查询WEB数据库的资料,甚至输入、更新和删除WEB服务器上的资料。下面笔者就简单介绍几种常用的“动态”网站设计方法:
1、CGI(Common Gateway Interface)
通用网关接口的传统方式,当用户在浏览器端填好表单(form)要求输入的资料,提出HTTP请求后,WEB服务器端将执行一个表单所设定的可执行的CGI应用程序,CGI程序分析表单(form)中所输入的资料,存取WEB数据库,将查询执行的结果以HTML的格式返回给浏览器。使用CGI 方式存取WEB数据库,有很多的缺点,譬如不易开发、变更修改成本高、功能有限、不易侦错、执行速度慢等,而且由于并非整合于HTML文档之中,因此必须使用与HTML完全不同的设计过程来设计一个可执行的应用程序。
2、IDC(Internet Database Connector)
互联网数据库连接头是Windows NT Server内含Internet Information Server(简称IIS)2.0的特征之一,它提供了一种使你的互联网数据库内容得以发布并可与用户交互的方法,它实际上是一个包含于IIS中的I S A P I 应用程序。你只需掌握HTML和SQL的基本知识并写为数不多的代码就能编出具有交互能力的数据库应用程序,让使用者在浏览器界面中得以查询、输入、更新、和删除WEB服务器上的数据资料。正如VB程序员所喜欢的那样,构成IDC应用程序的文件是解释性的,由于设计简易,只要准备两个档案,即可在用户端的浏览器中存取WEB服务器的数据资料,且无须编译,因此具有快速的开发循环和反馈。但这种简单性的代价是牺牲了许多灵活性,使你不得不放弃许多对用户接口的控制,并几乎放弃了所有验证数据的能力。因而I D C仅适用于简单的WEB应用程序。
3、ActiveX Data Object(ADO)是WEB数据库应用的最佳选择。
ActiveX Data Object(简称ADO)究竟是什么呢?ActiveX Data Object 的技术,让您可以与Active Server Pages(简称ASP)结合以建立提供数据资讯的网页内容,只需在网页面中执行Structured Query Language(结构化查询语言,简称SQL)指令,让用户在浏览器界面中输入、更新、和删除WEB服务器上的数据资料。当用户端的浏览器填好表单所要求输入的资料并按下“Submit”按钮后,经过互联网、内联网传送HTTP请求到WEB服务器,该请求在WEB服务器执行一个表单所指定的Active Server Pages程序(后缀名为. ASP的文档)。一个. ASP文档是一个纯文字档,包括:HTML 标记(tags)、VBScript或JScript语言的程序代码、ASP语法、和结构化查
询语言SQL指令。IIS3.0 / 4.0 WEB服务器执行. ASP文档,通过ODBC驱动程式,连接到支持ODBC的数据库上,执行ASP文档所指定的SQL指令,最后将执行的结果以HTML的格式传送给用户浏览器。ADO具有容易使用、开发执行快速、消耗系统资源较少,和占用磁盘空间小等优点。
以上就是目前设计商业网站常用的“动态”技术,由于本人的工作和使用经验,笔者较倾向于ADO和ASP的结合,从长远来看这对搭档也势必成为今后一段时间内“动态”WEB的核心技术。因此在本文第二章《动态网页设计十八般武艺》中,笔者将就ADO和ASP的使用进行展开讲述,敬请期待。
第二章简介
看了《引言》后,你是否已经急不可待地想构建属于你自己的动态网站?本文将以Active Server Pages 为中心,向你全面展示制作动态商业网站的步骤和技巧。
上一章给大家简要介绍了建立动态网站的一些方法和制作工具,本章将以如何建立基于IIS 的ASP 动态网站为中心向大家一步一步地揭示动态商业网站设计的真正奥秘。为了使各位能够全面、细致地掌握ASP 的开发技巧,本文今后将采取连载的形式,手把手地教你如何建立属于自己ASP 动态网站。由于本文是作者根据自己的学习和实践经验并结合了一些外文资料而写成的,因此不免会有一些偏颇,希望各位见谅。如发现本文有何不当之处,请及时通知作者,谢谢。
Microsoft Active Server Pages 即我们所称的ASP ,其实是一套微软开发的服务器端脚本环境,ASP 内含于IIS 3.0 和4.0 之中, 通过ASP 我们可以结合HTML 网页、ASP 指令和ActiveX 元件建立动态、交互且高效的WEB 服务器应用程序。有了ASP 你就不必担心客户的浏览器是否能运行你所编写的代码,因为所有的程序都将在服务器端执行,包括所有嵌在普通HTML 中的脚本程序。当程序执行完毕后,服务器仅将执行的结果返回给客户浏览器,这样也就减轻了客户端浏览器的负担,大大提高了交互的速度。以下罗列了Active Server Pages 所独具的一些特点:
1. 使用VBScript、JScript等简单易懂的脚本语言,结合HTML代码,即可快速地完成网站的应用程序。
2. 无须编译,容易编写,可在服务器端直接执行。
3. 使用普通的文本编辑器,如Windows 的记事本,即可进行编辑设计。
4. 与浏览器无关(Browser Independence), 用户端只要使用可执行
HTML 码的浏览器,即可浏览Active Server Pages 所设计的网页内容。Active Server Pages 所使用的脚本语言(VBScript 、Jscript) 均在WEB 服务器端执行,用户端的浏览器不需要能够执行这些脚本语言。
5.Active Server Pages 能与任何ActiveX scripting 语言相容。除了可使用VBScript 或JScript 语言来设计外,还通过plug-in 的方式,使用由第三方所提供的其他脚本语言,譬如REXX 、Perl 、Tcl 等。脚本引擎是处理脚本程序的COM(Component Object Model) 物件。
6.Active Server Pages 的源程序,不会被传到客户浏览器,因而可以避免所写的源程序被他人剽窃,也提高了程序的安全性。
7. 可使用服务器端的脚本来产生客户端的脚本。
8. 物件导向(Object-oriented )。
9.ActiveX Server Components(ActiveX 服务器元件) 具有无限可扩充性。可以使用Visual Basic 、Java 、Visual C++ 、COBOL 等编程语言来编写你所需要的ActiveX Server Component 。
ASP 的奇妙之处真是不胜枚举,下面就请各位系好安全带,我将带领大家进入ASP 的梦幻世界。
首先,让我们来看看运行ASP 所需的环境:
Microsoft Internet Information Server version 3.0/4.0 on Windows NT Server
Microsoft Peer Web Services Version 3.0 on Windows NT Workstation
Microsoft Personal Web Server on Windows 95/98
正如前文所述,与一般的程序不同,.asp 程序无须编译,ASP 程序的控制部份,是使用VBScript 、JScript 等脚本语言来设计的,当执行ASP 程序时,脚本程序将一整套命令发送给脚本解释器( 即脚本引擎) ,由脚本解释器进行翻译并将其转换成服务器所能执行的命令。当然,同其他编程语言一样,ASP 程序的编写也遵循一定的规则,如果你想使用你所喜爱的脚本语言编写ASP 程序,那么你的服务器上必须要有能解释这种脚本语言的脚本解释器。当你安装ASP 时,系统提供了两种脚本语言:VBsrcipt 和JScript ,而VBscript 则被作为系统默认的脚本语言。你也可以根据自己的喜好改变系统默认的脚本语言,关于如何改变系统默认的脚本语言请看《在ASP 中使用脚本语言》一文。
ASP 本身并不是一种脚本语言,它只是提供了一种使镶嵌在HTML 页面中的脚本程序得以运行的环境。但是,要学好ASP 又必须掌握它的语法和规则。现在就让我们开始一步一步地认识并学习Active Server Pages 。
ASP 程序其实是以扩展名为.asp 的纯文本形式存在于WEB 服务器上的,你可以用任何文本编辑器打开它,ASP 程序中可以包含纯文本、HTML 标记以及脚本命令。你只需将.asp 程序放在WEB 服务器的虚拟目录下(该目录必须要有可执行权限),就可以通过WWW 的方式访问
ASP 程序了。要学好ASP 程序的设计,必须掌握脚本的编写,那么究竟什么是脚本呢?其实脚本是由一系列的脚本命令所组成的,如同一般的程序,脚本可以将一个值赋给一个变量,可以命令WEB 服务器发送一个值到客户浏览器,还可以将一系列命令定义成一个过程。要编写脚本,你必须要熟悉至少一门脚本语言,如VBScript 。脚本语言是一种介乎于HTML 和诸如JA V A 、Visual Basic 、C++ 等编程语言之间的一种特殊的语言,尽管它更接近后者,但它却不具有编程语言复杂、严谨的语法和规则。如前所述ASP 所提供的脚本运行环境可支持多种脚本语言,譬如:JScript 、REXX 、PERL 等等,这无疑给ASP 程序设计者提供了广泛的发挥余地。ASP 的出现使得广大WEB 设计者不必在为客户浏览器是否支持而担心,实际上就算你在同一个 .asp 文件中使用不同的脚本语言,你都无须为此担忧,因为所有的一切都将在服务器端进行,客户浏览器得到的只是一个程序执行的结果,而你也只需在.asp 中声明使用不同的脚本语言即可。下面是一个典型的在同一.asp 文件中使用两种脚本语言的例子:
< HTML>
< BODY>
< TABLE>
< % Call Callme %>
< /TABLE>
< % Call ViewDate %>
< /BODY>
< /HTML>
< SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Callme
Response.Write "< TR>< TD>Call< /TD>< TD>Me< /TD>< /TR>"
End Sub
< /SCRIPT>
< SCRIPT LANGUAGE=JScript RUNAT=Server>
function ViewDate()
{
var x
x = new Date()
Response.Write(x.toString())
}
< /SCRIPT>
这是各位在本文中接触的第一个真正的ASP 程序,千万不要被“< % %> ”符号搞糊涂,这其实是标准的ASP 定界符,而“< SCRIPT><
/SCRIPT> ”之间的就是脚本语言。ASP 不同于脚本语言,它有自己特定的
语法,所有的ASP 命令都必须包含在< % 和%> 之内,如:< %
test="English" %> ,ASP 通过包含在< % 和%> 中的表达式将执行结果输出到客户浏览器, 如:< % =test %> 就是将前面赋给变量test 的值English 发送到客户浏览器中,而当变量test 的值为Mathematics 时, 以下程序:
This weekend we will test < % =test %>.
在客户浏览器中则显示为:
This weekend we will test Mathematics.
学习ASP 最好的方法莫过于亲自动手编写,为了在最短的时间内使各位掌握ASP 的程序设计技巧,本文将采取实例分析法,通过一系列的实例让各位在实践中学习ASP 。建立一个ASP 页面,你所需的只是打开一个文本编辑器,如:Notepad ,然后跟我开始动手编写第一个ASP 程序。下面我们将建立一个自动监测浏览时间并根据不同时段动态显示不同页面内容的ASP 程序,请将以下代码剪贴到你的文本编辑器中, 并存为
test1.asp :
< html>
< body>
< FONT COLOR="Green">
< % If Time < #12:00:00# And Time >= #00:00:00# Then %>
早上好,今天天气不赖啊 !
< % ElseIf Time < #19:00:00# And Time >= #12:00:00# Then %>
下午好 !
< % Else %>
哈喽 ! 今晚你有没有去 IRC 聊天 !
< % End If %>
< /body>
< /html>
将test1.asp 保存在WEB 服务器的虚拟目录( 如:aspsamp/) 下,并在浏览器中用HTTP 的方式进行浏览,如:
http://yourcomputername/aspsamp/test1.asp,你将会新奇地发现,你的页面真的活起来了。虽然,这只是一个非常简单的实例,而且这一功能完全可以通过JavaScript 完成,但是不难发现使用ASP 要比JavaScript 简洁、迅速得多,而且运用此法,你完全可以轻而易举地令你的网页在不同的时段展示不同的风格。此例中的“Time ”实际上是一个VBScript 内置的显示系统当前时间的函数,由于系统默认的脚本语言是VBScript ,因此当你在ASP 命令中调用该函数时,脚本引擎会自动将其转换成当前的系统时间。接下来我们将给test1.asp 添加一点色彩,在< body> 标识中添加“bgcolor="< % =bgc %> ”即变为 < body bgcolor="< % =bgc %>"> ,并在 < body> 标记
前添加如下语句:
< % If Time < #12:00:00# And Time >= #00:00:00# Then
bgc="silver"
ElseIf Time < #19:00:00# And Time >= #12:00:00# Then
bgc="navy"
Else
bgc="red"
End If
%>
如此一来,当用户在不同的时段访问你的页面时,他们将会看到不同的页面背景色。我们可以做的事情还有很多,譬如你想知道在凌晨至十二点之间浏览你页面的客户的姓名,并向他或她问好,那么下面的这段程序将能助你达成心愿。首先你需要在页面中设置表单,将以下HTML 代码剪贴到“< % If Time < #12:00:00# And Time >= #00:00:00# Then %> ”之后:
欢迎光临我的主页,请填写以下信息:
< FORM METHOD="POST" ACTION="test1.asp">
< P>
First Name: < INPUT NAME="fname" SIZE="48">
< P>
Last Name: < INPUT NAME="lname" SIZE="48">
< P>
Title: < INPUT NAME="title" TYPE=RADIO VALUE="mr">Mr.
< INPUT NAME="title" TYPE=RADIO VALUE="ms">Ms.
< P>< INPUT TYPE=SUBMIT>< INPUT TYPE=RESET>
< /FORM>
然后在以上 HTML 代码后面添加如下 ASP 命令:
< %
title=request.form("title")
if title="mr" then
%>
欢迎您 Mr.< % =request.form("fname") %> 。
< % elseif title="ms" then %>
欢迎您 Ms.< % =request.form("fname") %> 。
< % else %>
< B>< font color=blue> 欢迎您 < % =request.form("fname")&"
"&request.form("lname") %> 。 < /font>< /B>
< % end if %>
保存文件test1.asp ,并在浏览器中以HTTP 方式进行浏览,如果此时
的系统时间在凌晨0:00:00 和中午12:00:00 之间的话,浏览器将显示如下画面:
这其实是一个在Internet 和Intranet 上常见的功能,即当用户在浏览器端填写完表单后,通过调用一个通用网关程序将用户数据传送到服务器,由服务器进行处理后再将结果返还给客户浏览器。过去为了实现这样的功能必须编写一个独立于HTML 之外的CGI 程序,并通过HTML 进行调用,撇开CGI 编写复杂等缺点不谈,CGI 的执行效率也是一个大问题,每一个表单(form) 均须执行一个可执行文档,当多人同时上线使用时,多个文档同时执行,将大大降低WEB 服务器的执行速度,如今ASP 提供了与HTML 完全相融的编程环境,显然要比使用CGI 便捷得多。
在本期的最后让我们再来看看ASP 的循环功能,譬如你希望当客户在晚间7:00 至凌晨0:00:00 浏览你的页面时,在页面中央显示6 个笑脸
表示问候,那么你只需要将以下命令剪贴到“ Good Evening! ”后面即可:< % for i=1 to 6 %>
< p>< center>< img src="smile.gif" width="32" height="32" alt=" 晚上好 ">< /p>
< % next %>
这是一个最最基本的循环语句,它将一个笑脸图片重复调用六次并显示在页面上。当然此例的效果完全可以用HTML 做到,但是不难发现使用ASP 大大缩短了代码的重复编写,使得程序具有良好的可阅读性。另外,当你制作一个诸如根据用户投票来给所评测的对象评定星级的评测站点时,使用此法,你就完全不需要为每一个星级制作一幅图片。如果一个对象被评为4 星级,那只需将一颗星的图片循环显示 4 次,以此类推即可。当然,当工作量较小的时候你不会感觉到ASP 的好处,然而一旦数据量巨增,你将会深刻的体会到ASP 动态网站给你带来的前所未有的感受!
第三章ASP基础
本文ASP 篇(1) 展示了ASP 动态网站设计的一些最基本的方法,相信通过实践各位对ASP 已经有了最基本的了解,本篇在答复大家所提问题的同时,将进一步介绍ASP 动态网站的一些基本技巧。
自本文第一篇刊登后, 络绎不绝地收到了一些朋友的来信,出乎作者的意料,其中有相当一部分是初次接触ASP,因此有许多朋友都提出为何在浏览器中浏览ASP 篇(1)中的范例时看到的竟然是原代码?由于遇到此问题的朋友较多,故作者在此一并回答。首先,我要再次强调ASP 是一套服务器端的脚本环境,当用户从浏览器向Web服务器请求.asp文件时,ASP
脚本开始运行,然后Web 服务器调用ASP ,ASP全面读取请求的文件,执行所有脚本命令,并将Web 页传送给浏览器,这就意味着你不能简单地在现有的操作系统(如Win95、98)下,用浏览器中的" 打开" 命令来浏览.asp 文件;其次,运行.asp 文件需要服务器端的支持,目前除了WindowsNT下的Microsoft Internet Information Server支持Active Server
技术外,Active Server还可用于MS Windows NT Workstation 和MS Windows95/98 中的Personal Web Server 的构件,因此无论你安装的是NT 还是WIN95/98,都必须在原系统上安装支持ASP的服务器端环境,才能使你的机器得以运行.asp 文件。由于目前绝大多数朋友安装的是Win95 或是98 ,因此作者就在这里着重介绍如何在Win95/98 下运行和浏览.asp 文件。因为MSPersonal Web Server 支持通用网关接口(CGI) 应用程序、Internet 数据库接口(IDC) 应用程序和IIS 应用程序接口(ISAPI) 应用程序,并且支持运行和开发ASP 应用程序,所以使得Win95 及其以后操作平台具备了近似于NT 的健全的网站运作和管理功能。你所要做的只是在现有的Win95/98 系统上安装MS Personal Web Server ,建议安装最新的4.0 版本。当安装完成后,PWS4.0 会在系统启动时自动加载。打开PWS ,选择左栏中的" 高级" 按钮( 见下图Asp2a.gif) ,点取" 虚拟目录" 下的"/_private" 目录,然后点击右边的" 编辑属性" 按钮,如图所示,在对话框中你可以编辑该虚拟目录的物理路径和目录名,上图中"/_private"的物理路径为"D:\Inetpub\wwwroot" ,该目录是系统默认的WWW发布根目录,将上一篇中的范例test1.asp文件复制到"D:\Inetpub\wwwroot" 目录下。最后,你只要将该虚拟目录的访问权限选择为"执行" ,并在浏览器的"地址" 栏中输入"http://localhost/test1.asp " 就可以运行并浏览该ASP 程
序了。
知道了如何运行并浏览ASP 程序,下面我们就继续ASP 动态网站设计的学习。
上一篇给大家介绍了几个最基本的ASP 程序,相信大家已经对ASP 的应用有了大致的了解,本篇将继续介绍一些用ASP 编写的WEB 动态功能。由于WEB 浏览器标准的不一致从而使得如何能够让自己制作的网站去适应各种不同的浏览器成为了广大网站设计者最为头疼的事,在如今的形势之下,我们不肯也不可能去抛弃Netscape 或IE 中的任何一种客户群,但我们有时候又不得不去考虑客户端浏览器的实际浏览效果,过去我们常用JavaScript 编写一段程序来辨别客户端使用的不同的浏览器,那么今天就让我们来看看如何使用ASP 更为便捷且精确地达到这一目的。将以下代码,剪贴到你的Notebook 中,并保存为browser.asp 。
< %@ LANGUAGE = VBScript %>
< HTML>
< HEAD>
< TITLE>用ASP提供的浏览器性能组件来辨别客户浏览器< /TITLE> < /HEAD>
< BODY BGCOLOR="White" topmargin="10" leftmargin="10">
< font size="4" face="Arial, Helvetica">
< b>用ASP提供的浏览器性能组件来辨< br>别客户浏览器< /b>< /font>< br>
< hr size="1" color="#000000">
< !-- 定义并创建浏览器性能对象 -->
< %
Dim bc
Set bc = Server.CreateObject("MSWC.BrowserType")
%>
< !-- 在表格中描述客户浏览器的信息 -->
< Table border=1>
< tr>
< td>Browser Name< /td>
< td> < %=bc.Browser %> < /Td>
< tr>
< td>Browser Version< /td>
< td> < %=bc.Version %> < /Td>
< tr>
< td>Major Version< /td>
< td> < %=bc.Majorver %> < /Td>
< tr>
< td>Minor Version< /td>
< td> < %=bc.Minorver %> < /Td>
< tr>
< td>Frame Support< /td>
< td> < %=bc.Frames %> < /Td>
< tr>
< td>Table Support< /td>
< td> < %=bc.Tables %> < /Td>
< tr>
< td>Cookie Support< /td>
< td> < %=bc.Cookies %> < /Td>
< tr>
< td>Background Sound Support< /td>
< td> < %=bc.BackgroundSounds %> < /Td>
< tr>
< td>VBScript Support< /td>
< td> < %=bc.VBScript %> < /Td>
< tr>
< td>JavaScript Support< /td>
< td> < %=bc.JavaScript %> < /Td>
< /table>
< /BODY>
< /HTML>
用http 方式浏览该文件,不同浏览器,你会看到类似下图(Asp2b.gif) 的页面。在本例中我们用到了一个ASP提供的ActiveX 组件--"Browser Capabilities"。ActiveX 组件作为基于Web 的应用程序部分在Web 服务器上运行,组件提供了应用程序的主要功能( 如访问、修改数据库等) ,这样WEB 设计者们就不必创建或重新创建执行这些任务的代码,从而提高了工作的效率,有关ActiveX 组件将在今后详细讨论。为了使用ASP 辨别客户浏览器,在这里我们利用"Browser Capabilities" 组件创建了一个Browser Type 对象,该对象提供带有客户端网络浏览器功能说明的用户脚本,当浏览器连接到网络服务器上时,它会自动发送一个UserAgentHTTP 标题,该标题是一个声明浏览器及其版本的ASCII 字符串。此Browser Type 对象将该标题和在Browscap.ini 文件中的项进行比较(Win98 、
IIS3 、IIS4 的用户分别可以在以下目录中"win98\system\inersrv"、"\winnt\system32\inetsrv\asp\cmpnts"、"\winnt\system32\inetsrv"找到该文件) 。如果找到匹配的项,则该Browser Type 对象将认为浏览器列表属性与UserAgent 标题匹配。若该对象在browscap.ini 文件中找不到与该标题匹配的项,那么将使用默认的浏览器属性。若该对象既未找到匹配项且browscap.ini 文件中也未指定默认的浏览器设置,则它将每个属性都设为字符串"UNKNOWN" 。我们可以通过更新browscap.ini 文件将属性或新的浏览器定义添加到该组件中,从而扩大ASP 识别的浏览器范围和精确度。下面列出了browscap.ini 中的一部分内容( 不包括注释部分) :[IE 4.0] ;;HTTPUserAgentHeader
browser=IE ;;指定该浏览器的名称。
Version=4.0 ;;指定该浏览器的版本号。
majorver=4 ;;指定主版本号
minorver=0 ;;指定副版本号
frames=TRUE ;;指定该浏览器是否支持框架。
tables=TRUE ;;指定该浏览器是否支持表格。
cookies=TRUE ;;指定该浏览器是否支持cookies。
backgroundsounds=TRUE ;;指定该浏览器是否支持背景音乐。
vbscript=TRUE ;;指定该浏览器是否支持VBScript。
javascript=TRUE ;;指定该浏览器是否支持JScript。
javaapplets=TRUE ;;指定该浏览器是否支持 Java程序。ActiveXControls=TRUE ;;指定该浏览器是否支持 ActiveX 控件。
Win16=False ;; 指定该浏览器是否支持Win16
beta=False ;;指定该浏览器是否测试版。
cdf=True ;;指定该浏览器是否支持用于 Web 预测的 Channel Definition Format。
;;ie 4.01
[Mozilla/4.0 (compatible; MSIE 4.01*; Windows 95)]
parent=IE 4.0 ;;父标签允许第二个浏览器继承第一个浏览器的定义version=4.01
minorver=01
platform=Win98
;;Default Browser ;;指定默认的浏览器的设置
[Default Browser Capability Settings]
browser=Default
frames=FALSE
tables=TRUE
cookies=FALSE
backgroundsounds=FALSE
vbscript=FALSE
javascript=FALSE
在上面的例子中,父标签允许第二个浏览器继承第一个浏览器的定义,以便Microsoft Internet Explorer4.01 定义得以继承Microsoft Internet Explorer4.0 定义全部的属性(例如,frames=TRUE 、tables=TRUE以及cookies=TRUE) 。并通过添加platform=Win98 行来指定平台,用
version=4.01 重写版本信息。
在先前的browser.asp 中我们仅仅是将客户浏览器的属性一一罗列了
出来,下面让我们添加一些动态的效果。将以下代码剪贴到文件browser.asp 中(编辑注:为显示方便,所有“< ”符号后都多加了个空格,实际使用时请注意去掉。):
< % if (bc.frames = TRUE) then %>
你的浏览器支持框架!< br>
< % else %>
难道现在你还在使用不支持框架的浏览器???< br>
< % end if %>
< % if (bc.tables = TRUE) then %>
你的浏览器支持表格。< br>
< % else %>
难道现在你还在使用不支持表格的浏览器 ???< br>
< % end if %>
< % if (bc.BackgroundSounds = TRUE) then %>
有没有听到美妙的音乐???< br>
< % else %>
可惜 , 您的浏览器不支持背景音乐。< br>
< % end if %>
< % if (bc.vbscript = TRUE) then %>
您的浏览器支持Vbscript。< br>
< % else %>
您的浏览器不支持Vbscript。< br>
< % end if %>
< % if (bc.javascript = TRUE) then %>
您的浏览器支持 Javascript。< br>
< % else %>
您的浏览器不支持 Javascript。< br>
< % end if %>
在你的浏览器中刷新browser.asp ,程序将自动辨别浏览器的属性并动态显示不同的信息。不难发现在整个browser.asp 文件中几乎没有用到任何复杂的编程,就轻而易举的达到了动态鉴别客户浏览器并动态产生响应事件的效果。事实上,这个程序的关键就在于前文提到的ActiveX 组件
--"Browser Capabilities" ,它的作用类似于一个Function ,只需简单地在程序中调用该组件即能达到你所希望的效果。
通过这两篇对ASP 的介绍,大家已经看到编写ASP 程序是相当轻松的,要掌握ASP ,无非就是掌握ASP 内置的五个对象,以及ASP 提供的ActiveX 组件的对象、方法和属性,当然扎实的脚本语言编写能力也是必须的。在今后的课程中作者将用五到六篇的篇幅着重介绍这些内置对象和组件的作用及使用方法,敬请关注。
第四章脚本基础
通过前两篇的学习,相信各位已经对ASP 的动态网站设计有了一个基本的概念和整体的印象。从本篇开始作者将从脚本语言的使用着手,由浅入深地带领大家探索ASP 动态网站设计的真正奥秘。
本文第二篇刊登后,很多朋友给我发了“妹儿”,希望能尽快看到本文的第三、第四、乃至第……篇,甚至有位朋友焦急地要我将ASP 篇的全文发给他。看到有如此之多志同道合的朋友,令我精神大振。虽然ASP 早在两年前就已经推出了,但直到今年它才以其灵活便捷的开发过程、良好的WEB 数据库连接功能受到了国人的重视,然而由于目前国内尚缺乏关于ASP 开发WEB 应用程序的详尽教材,因此使得国内广大WEB 开发者们仍处在闭门啃E 文的阶段,也包括作者本人。也正因为如此,作者才蒙发了写文章的念头,在得到Chinabyte 网络学院翁斌先生的大力支持后,各位才得以见到此文。
作者殷切希望能通过此文为广大WEB 开发者和爱好者提供便利,使大家共同来参加ASP 的学习和交流,为了顾全不同层次读者的需求作者还是决定从最基本的脚本语言的编制着手,随后再一步一步地讲解ASP 内建对象、ActiveX 组件以及用ASP 开发WEB 应用程序的实例,相信通过一段时间持续的学习,不出几个月各位都能够得心应手地开发自己的动态网站。下面就先请大家跟我来学习一些ASP 中应用脚本语言(以VBScript 为主)的基础知识。
在开始学习脚本语言之前,你应该理解一些简单的概念-- 变量、进程。所谓变量是计算机内存中已命名的存储位置,其中包含了数字或字符串等数据,它使用户便于理解脚本操作的名称,为用户提供了一种存储、检索和操作数据的途径。程序是由一个或多个进程组成的,在VBScript 中,进程就是“指令块”,通常意义上的进程,如Sub,只是为了简单的数据处理。
在VBScript 中,严格的来讲变量是不用声明的,
如:< % Mystring="This is my string" % >
然而,即使在使用变量前不需要去声明变量,也应养成在编程时声明变量的良好习惯,因为这样有助于防止错误发生。声明一个变量意味着告诉脚本引擎,有一个特定名称的变量,这样就可以在脚本中引用该变量。在VBScript 中声明一个变量可以使用“Dim”语句,如下:
< script language="VBScript" >
< !--
Option Explicit ' 要求在脚本中声明所有的变量
Dim Mystring
Mystring="This is my string"
-- >
< /script>
变量的作用域即生命期,决定哪些脚本命令可访问变量。在过程内部声明的变量具有局部作用域。每执行一次过程,变量就被创建然后消亡。而过程外部的任何命令都不能访问它。在过程外部声明的变量具有全局作用域,其值能被ASP 页上的任何脚本命令访问和修改。声明变量时,局部变
量和全局变量可以有相同的名称。而改变其中一个的值并不会改变另一个的值。如果没有声明变量,则可能不小心会改变一个全局变量的值。例如,以下脚本命令返回值1,虽然有两个名为Y 变量:
< %
Dim YY = 1Call SetLocalVariableResponse.Write Y
Sub SetLocalVariable
Dim Y
Y = 2End Sub % >
由于变量没有显式声明,以下的脚本命令将返回 2。当过程调用将 Y 设置为 2 时,脚本引擎认为该过程是要修改全局变量:
<%
Y = 1Call SetLocalVariableResponse.Write Y
Sub SetLocalVariable
Y = 2
End Sub% >
然而,全局变量仅在单个ASP 页中可用,要使它在单个ASP 页之外可用,就必须为变量赋予会话或应用程序作用域。会话作用域变量对一个用户所请求的ASP 应用程序中的所有页都是可用的。应用程序作用域变量也如此。对单个用户来说,会话变量是存储信息的最佳途径,例如,用户首选项、用户名或用户的标识。对于一个特殊应用程序的所有用户,应用程序作用域是存储信息的最佳途径,例如,应用程序特定的问候语或应用程序所需的初始值。ASP 提供两个内建对象来让您存储变量:Session 对象和Application 对象,这将在今后的ASP 内建对象中着重讨论。
让我们再来看看常量的定义,常量是用来代替一个数或字符串的名称,它在整个脚本中保持不变。您可以使用Const 语句在VBScript 中创建用户自定义常数。使用Const 语句可以创建名称具有一定含义的字符串型或数值型常数,并给它们赋原义值。例如:。
如:< % Const mystring=" 这是一个常量" % >
< % Const myage=100 % >
请注意字符串文字包含在两个引号(" ") 之间。这是区分字符串型常数和数值型常数的最明显的方法。日期文字和时间文字包含在两个井号(#)
之间。例如:
< % Const CutoffDate = #6-1-97# % >
在理解了常量和变量之后,我们来看看什么是过程。它是一组能执行指定任务且具有返回值的脚本命令。您可以定义自己的过程,然后在脚本中反复调用它们。您可以将过程定义放在调用过程的 .asp 文件中,也可以将通用过程放在一个共享的 .asp 文件中,然后用SSI #include 指令将其包含进其他调用其过程的.asp 文件中。您还可选择另一种方法,即把这些功能
打包在ActiveX 组件中。过程定义可出现在< SCRIPT > 和< /SCRIPT > 标记内部且必须遵循声明脚本语言的规则。如果过程所用的语言与主脚本语言不同,则要使用< SCRIPT > 元素。主脚本语言中的过程用脚本分界符(< % 和% >) 分隔。用HTML< SCRIPT > 标记时,必须使用两个属性来保证服务器端能够处理脚本。使用< SCRIPT > 标记的语法如下:< SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT >
procedure definition
< /SCRIPT >
这里的RUNAT=SERVER 属性通知Web 服务器在服务器上处理脚本。若不设置该属性,脚本将由客户端浏览器处理。LANGUAGE 属性决定此脚本块所用的脚本语言。您可以指定任何一种具有脚本引擎的语言。请使用VBSCRIPT 指定VBScript;用JSCRIPT 指定JScript。若不设置LANGUAGE 属性,将用主脚本语言解释此脚本块。
在VBScript 中,过程被分为两类:Sub 过程和Function 过程。Sub 过程是包含在Sub 和End Sub 语句之间的一组VBScript 语句,执行操作但不返回值。Sub 过程可以使用参数(由调用过程传递的常数、变量或表达式)。如果Sub 过程无任何参数,则Sub 语句必须包含空括号()。
Function 过程是包含在Function 和End Function 语句之间的一组VBScript 语句。Function 过程与Sub 过程类似,但是Function 过程可以返回值。Function 过程可以使用参数(由调用过程传递的常数、变量或表达式)。如果Function 过程无任何参数,则Function 语句必须包含空括号()。Function 过程通过函数名返回一个值,这个值是在过程的语句中赋给函数名的。Function 返回值的数据类型总是Variant。在下面的示例中Sub 过程使用两个固有的(或内置的)VBScript 函数,即MsgBox 和InputBox,来提示用户输入信息。然后显示根据这些信息计算的结果。计算由使用VBScript 创建的Function 过程完成,Celsius 函数将华氏度换算为摄氏度。Sub 过程ConvertTemp 调用此函数时,包含参数值的变量被传递给函数。换算结果返回到调用过程并显示在消息框中。
Sub ConvertTemp()
temp = InputBox(" 请输入华氏温度。", 1)
MsgBox " 温度为 " & Celsius(temp) & " 摄氏度。"
End Sub
Function Celsius(fDegrees)
Celsius = (fDegrees - 32) * 5 / 9
End Function
给过程传递数据的途径是使用参数。参数被作为要传递给过程的数据的占位符。参数名可以是任何有效的变量名。使用Sub 语句或Function 语句创建过程时,过程名之后必须紧跟括号。括号中包含所有参数,参数间用
逗号分隔。例如,在下面的示例中,fDegrees 是传递给Celsius 函数的值的占位符:
Function Celsius(fDegrees)
Celsius = (fDegrees - 32) * 5 / 9
End Function
要从过程获取数据,必须使用Function 过程。请记住,Function 过程可以返回值;Sub 过程不返回值。
以上给大家简要介绍了VBScript,由于篇幅的原因,作者不可能在此详尽介绍VBScript 的所有知识。但是由于ASP 本身并不是一种编程语言,因此在大家编写ASP 应用程序的过程中,必须借助脚本语言来实现许多特殊的功能,所以灵活熟练地掌握脚本语言对一个使用ASP 编写WEB 应用程序的程序员来说是至关重要的。无论您是一个有丰富编程经验的高手还是一个初学者,只要您现在希望通过ASP 编写WEB 应用程序,作者极力建议您掌握至少一门脚本语言(如VBScript)。在本篇的末尾作者将留一道课后作业给大家,希望各位能通过自学有关书籍并在实践中迅速掌握脚本语言。
第五章脚本变量、函数、过程和条件语句
在上一期中作者向诸位简要介绍了ASP 脚本语言之一VBScript 的
一些基本常识,本期将继续给大家讲解VBScript 的脚本编写方法,并通过展示VBScript 在ASP 程序编写过程中的一系列实例使大家对VBScript 有更进一层的理解。
大家在学习了脚本语言VBScript 的变量、常量和过程的基本概念后,本期将继续向各位介绍VBScript 的函数和语法。
函数和过程一样都是命名了的代码块,但它们却有很大的区别,过程完成程序任务,函数则返回值。我们可以这样理解,过程象一个完整的句子,而函数则象一个单词。举个例子,当你想获取某个数的平方根,你只要将该数传给VBScript 的Sqr() 函数,此函数会立即返回该数的平方根。如:A=sqr(9)
则A=3。熟练掌握脚本语言的函数将给你编写ASP 程序带来极大的方便,就以上一期结尾处作者布置给大家的课后练习来说,如果你对脚本语言的函数掌握不够全面,那么解决如此之小的一个问题将很有可能花费你相当大的精力。现在让我们来回顾一下这道课后练习。
“作者正在用ASP 制作一套基于WEB 的BBS 系统,希望能在其中添加一项特殊功能,即当任何用户登陆该BBS 后都能够查阅近七天来所有
编程一 1.请编写代码,在页面上显示如下图形。注意:只要写出主要代码即可 ********** ********* ******** ******* ****** ***** **** *** ** * 答案:<% Dim I,J For I=10 To 1 Step -1 For J=1 To I Response.Write "*" Next Response.Write "
" Next %> 2.利用Recodset对象也可以插入记录,现在针对图1所示的数据表,利用插入一条记录:其中网站名称为“搜狐”,网站地址为“https://www.doczj.com/doc/1e8522250.html,”,网站简介为“门户网站”,提交日期为当天。 注意:只给出主要代码即可,程序的开头部分已经给出。 <% Dim db, strConn strConn="Dbq=" & Server.Mappath("address.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}" Set db=Server.CreateObject("ADODB.Connection") 答:<% Dim db, strConn strConn="Dbq=" & Server.Mappath("address.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}" Set db=Server.CreateObject("ADODB.Connection") '建立Recordset对象 Set rs=Server.CreateObject("ADODB.Recordset") strSql ="Select * From link" rs.Open strSql,db,0,2 '添加记录
第一章 1.填空题 (1).NET Framework主要包括公共语言运行库CLR和类库。 (2)https://www.doczj.com/doc/1e8522250.html,网站在编译时,首先将语言代码编译成微软中间语言MSIL。(3)一台IIS Web服务器IP地址为210.78.60.19,网站端口号为8000,则要访问虚拟目录xxxy中default.aspx的URL为 http://210.78.60.19.8000/xxxy/default.aspx。 (4)可以通过复制网站同步网站上的一个文件。 2.是非题 (1)托管代码是以CLR为基础的代码。(√) (2)https://www.doczj.com/doc/1e8522250.html,3.5仍使用https://www.doczj.com/doc/1e8522250.html,2.0引擎。(√) (3).NET Framework 3.0是.NET Framework 3.5的一部分。(√) (4)https://www.doczj.com/doc/1e8522250.html, 3.5是边解释边执行的。(×) (5)在Visual Studio 2008环境中开发网站必须安装IIS。(×) 3.选择题 (1).NET Framwork3.5不包括(A) A. .NET Framework 1.1 B. .NET Framework 2.0 C. LINQ D. https://www.doczj.com/doc/1e8522250.html, AJAX (2)下面(D)网站在建立时要求安装Microsoft FrontPage服务器扩展。 文件系统 B. 本地IIS C. FTP站点 D.远程站点 (3)发布网站后不可能存在的文件夹是(B) A.App_Data B.App_Code C.App_Themes D.bin 第二章 1.填空题 (1)Visual Studio 2008 默认建立的XHIML文件类型是Transitional。 (2)利用XHTML建立一个链接到jxst@https://www.doczj.com/doc/1e8522250.html,邮箱的元素是……。 (3)存放Web窗体页C#代码的模型有单文件页模型和代码隐藏页模型。(4)单文件页模型中,C#代码必须包含于之间。 (5)外部样式表通过元素链接到网页。 (6)XML主要用于传输和存储数据。 2.是非题 (1)XHTML是HTML的子集。(×) (2)XHTML中每个元素都有结束标记。(√) (3).htm文件不需要编译,直接从Web服务器下载到浏览器执即可。(√)(4)基于类的样式在定义是要加前缀“#”。(×) (5)JavaScript代码必须包含在