收藏本站 收藏本站
积木网首页 - 软件测试 - 常用手册 - 站长工具 - 技术社区
积木学院 > 网页设计 > 经验技巧 > 正文

ASP教程

来源:互联摘选 日期:2006-09-28 01:47

如何令你的网站“动感十足”

  您的网站是否仍一如既往地保持“静态”?目前呈几何增长的互联网网站中,有相当一部分仍固守“静态”,无形中已大大落后于时代的步伐。所谓“静态”指的就是网站的网页内容“固定不变”,当用户浏览器通过互联网的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. 无须 compile 编译,容易编写,可在服务器端直接执行。
  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 和诸如 JAVA 、 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 篇 (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 Windows 95/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:Inetpubwwwroot" ,该目录是系统默认的 WWW 发布根目录,将上一篇中的范例 test1.asp 文件复制到 "D:Inetpubwwwroot" 目录下。最后,你只要将该虚拟目录的访问权限选择为 " 执行 " ,并在浏览器的 " 地址 " 栏中输入 "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 的用户分别可以在以下目录中 "win98systeminersrv" 、 "winntsystem32inetsrvaspcmpnts" 、 "winntsystem32inetsrv" 找到该文件 ) 。如果找到匹配的项,则该 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 %>
你的浏览器支持表格?lt; 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 制作一套基于 WEB 的 BBS 系统,作者希望能在其中添加一项特殊功能,即当任何用户登陆该 BBS 后都能够查阅近七天来所有新发布的信息。由于 ASP 本身的内建对象和组件并没有提供此项功能,因此作者请大家从 VBScript 着手,来设计这样一个功能。如有任何疑问请 EMAIL 作者,答案将在下一篇公布。敬请关注。



在上一期中作者向诸位简要介绍了 ASP 脚本语言之一 VBScript 的一些基本常识,本期将继续给大家讲解 VBScript 的脚本编写方法,并通过展示 VBScript 在 ASP 程序编写过程中的一系列实例使大家对 VBScript 有更进一层的理解。
   大家在学习了脚本语言 VBScript 的变量、常量和过程的基本概念后,本期将继续向各位介绍 VBScript 的函数和语法。
函数和过程一样都是命名了的代码块,但它们却有很大的区别,过程完成程序任务,函数则返回值。我们可以这样理解,过程象一个完整的句子,而函数则象一个单词。举个例子,当你想获取某个数的平方根,你只要将该数传给 VBScript 的 Sqr() 函数,此函数会立即返回该数的平方根。如:
   A=sqr(9)

   则 A=3。熟练掌握脚本语言的函数将给你编写 ASP 程序带来极大的方便,就以上一期结尾处作者布置给大家的课后练习来说,如果你对脚本语言的函数掌握不够全面,那么解决如此之小的一个问题将很有可能花费你相当大的精力。现在让我们来回顾一下这道课后练习。
   “作者正在用 ASP 制作一套基于 WEB 的 BBS 系统,希望能在其中添加一项特殊功能,即当任何用户登陆该 BBS 后都能够查阅近七天来所有新发布的信息。”

   如果你不熟悉 VBScrip,就不会知道 VBScrip 本身提供了一个用来取得日期之间的差或和的函数 DateSerial,它的语法如下:

   DateSerial(year, month, day)

   如果你要指定一个日期,例如:1998 年 11 月 10 日,那么 DateSerial 函数中每个参数的取值范围都应该是可接受的,即日的取值应在 1 和 31 之间,月的取值应在 1 和 12 之间。但是,也可以使用表示某日之前或之后的年、月、日数目的数值表达式为每个参数指定相对日期。以下样例中使用了数值表达式代替绝对日期。在这里,DateSerial 函数返回 1998 年 11 月 10 日之前二十年 (1990-20) 零两个月 (11-2) 又一天 (10-1) 的日期:即 1978 年 9 月 9 日。程序如下:
   Datep=DateSerial(1998-20, 11-2,10-1)

   对于 year 参数,若取值范围是从 0 到 99,则被解释为 1900 到 1999 年。对于此范围之外的 year 参数,则使用四位数字表示年份(例如 1800 年)。当任何一个参数的取值超出可接受的范围时,则会适当地进位到下一个较大的时间单位。例如,如果指定了 35 天,则这个天数将被解释成一个月加上多出来的日数,多出来的日数取决于其年份和月份。但是如果参数值超出 -32,768 到 32,767 的范围,或者由三个参数指定(无论是直接还是通过表达式指定)的日期超出了可以接受的日期范围,就会发生错误。

   当我们了解并掌握了函数 DateSerial 的使用方法后,再来看看作者布置的这道题目,一切就迎刃而解了。下面我将程序中的此部分代码公布如下:    itemp=DateSerial(Year(date), month(date), day(date)-7)
   itemp=DateValue(itemp)
   sql="Select * from message Where message.creatime Between #"&date&"# And #"&itemp&"# "

   在这里我们又接触到了一组函数 Year,month,day,它们是用来得到一个日期的年、月、日。date 是常数,表示今天日期,而函数 DateValue 则是将字符串变量转化为日期格式的变量。在本段程序的第三行,我们第一次接触到了标准的 SQL 查询语句,这句语句是什么意思呢?

   “Select”是标准的 SQL 数据库查询命令,通过 SELECT 语句我们可以在数据库中检索数据,并将查询结果提供给用户,此处的“*”表示查询该名为“message”的数据库中的所有记录,而“where”的作用是设定一个查询条件,是为了将数据库中符合条件的记录取出来,“message.creatime”是一个储存了数据库中记录创建日期的变量。将整句语句连起来理解就是:查询名为 message 的数据库中的所有记录,并将其中创建日期在今天和今天以前七日以内的所有记录存储在变量 sql 中。可能由于大家第一次接触 SQL 语句,一时间无法完全理解它的作用,不过不用担心在今后的章节中作者将专门用一期给大家介绍 SQL 的使用方法。
   通过上面的学习,大家应该已经能够理解函数在程序中的作用,当然我们不必去死背函数,但要做到熟练运用只有一条捷径 -- 多实践。接下来让我们来看看 VBScript 的基本语法。

   了解编程语言的朋友一定知道在程序中控制程序流程的语句主要可以分为条件语句和循环语句,在 VBScript 中可使用以下条件语句:    If...Then...Else 语句
   Select Case 语句


   If...Then...Else 语句用于计算条件是否为 True 或 False,并且根据计算结果指定要运行的语句。通常,条件是使用比较运算符对值或变量进行比较的表达式,If...Then...Else 语句可以按照需要进行嵌套。

   让我们来创建两个范例文件:if1.asp 和 if2.asp

   将以下语句剪贴到记事簿中,并保存为 if1.asp( 注意:请将程序中“<”后的空格去掉 )   < html>
  < head>
  < TITLE>if1.asp< /TITLE>
  < /head>< body bgcolor="#FFFFFF">
  < form action="if2.asp" method=get>
  Your First Name< INPUT NAME="FirstName" MaxLength=20>< p>
  Your Last Name< INPUT NAME="LastName" MaxLength=20>< p>
  < INPUT TYPE=submit>< INPUT TYPE=reset>
  < /form>
  < /body>
  < /html>
  将以下语句剪贴到记事簿中,并保存为 if2.asp   < html>
  < head>
  < TITLE>ifrespond.asp< /TITLE>
  < /head>
  < % fname=request.querystring("Firstname")
  lname=request.querystring("Lastname")
  If fname="George" and lname="Washington" then %>
  Hi.You must be the first president!
  < % else %>
  Hi!Nice to Meet You
  < %end if %>
  < /body>
  < /html>

   asp1.asp 产生一个文本输入框,要求用户输入姓、名,如下图:


 

   asp2.asp 则是用 IF 语句判断用户输入的姓名是否为“George Washington”, 并做出相应的反馈。在此我们遇到了一个 ASP 的内建对象 request,通过使用 request 对象可以访问任何用 HTTP 请求传递的信息,包括从 HTML 表格中用 POST 方法或 GET 方法传递的参数、cookie 和用户认证。而 QueryString 集合检索 HTTP 查询字符串中变量的值,HTTP 查询字符串由问号 (?) 后的值指定。如:
   http://localhost/if2.asp?Firstname=G ... name=Washington

   生成值为 "Firstname=George&Lastname=Washington" 的变量名字符串。关于 ASP 对象作者将在今后的几篇里重点讲述。

   If...Then...Else 语句的一种变形允许您从多个条件中选择,即添加 ElseIf 子句以扩充 If...Then...Else 语句的功能,使您可以控制基于多种可能的程序流程。

   我们将 asp2.asp 的程序部分扩充如下:  < %
  fname=lcase(request.querystring("Firstname"))
  lname=lcase(request.querystring("Lastname"))
  If fname="george" and lname="washington" then %>
  Hi.You must be the first president!< p>
  < % elseIf fname="ronald" and lname="reagan" then %>
  Hi.You must be the actor president!< p>
  < % elseIf fname="jimmy" and lname="carter" then %>
  Hi.You must be the peanut farmer president!< p>
  < % elseIf fname="naoko" or fname="charles" then %>
  Hi.Your name reminds me of someone,but I am not sure who!< p>
  < % else %>
  Hi!Nice to Meet You
  < % end if %>

   可以添加任意多个 ElseIf 子句以提供多种选择。但使用多个 ElseIf 子句经常会使程序变得很累赘。在多个条件中进行选择的更好方法是使用 Select Case 语句。

   Select Case 结构提供了 If...Then...ElseIf 结构的一个变通形式,可以从多个语句块中选择执行其中的一个。Select Case 语句提供的功能与 If...Then...Else 语句类似,但是可以使代码更加简练易读。Select Case 结构在其开始处使用一个只计算一次的简单测试表达式。表达式的结果将与结构中每个 Case 的值比较。如果匹配,则执行与该 Case 关联的语句块,我们同样可以用 Select Case 语句来写 asp2.asp 文件:
  < %
  fname=lcase(request.querystring("Firstname"))
  lname=lcase(request.querystring("Lastname"))
  name=fname+lname
  Select case name
  case "georgewashington"
  response.write "Hi.You must be the first president!< p>"
  case "ronaldreagan"
  response.write "Hi.You must be the actor president!< p>"
  case "jimmycarter"
  response.write "Hi.You must be the peanut farmer president!< p>"
  case "naokocharles"
  response.write "Hi.Your name reminds me of someone,but I am not sure who!< p>"
  case else
  response.write "Hi!Nice to Meet You"
  End Select %>

   请注意 Select Case 结构只计算开始处的一个表达式,并且只计算一次,而 If...Then...ElseIf 结构计算每个 ElseIf 语句的表达式,这些表达式可以各不相同。因此仅当每个 ElseIf 语句计算的表达式都相同时,才可以使用 Select Case 结构代替 If...Then...ElseIf 结构。Select Case 语句也是可以是嵌套的,每一层嵌套的 Select Case 语句必须有与之匹配的 End Select 语句。

   以上给大家介绍的脚本语言 VBScript 的函数和条件语句的使用方法,由于篇幅的缘故不能详细展开,希望各位有志学习 ASP 的朋友,能在课后进行一定程度的自学和练习。在日常开发 ASP 应用程序的过程中作者本人日渐体会到了脚本语言的重要性,灵活运用脚本语言将非但可以大大提高 ASP 应用程序的开发过程,给广大网站制作人员节省大量的时间,而且还能够增强 ASP 应用程序的执行效率和功能。欲善其事必先利其器,因此作者在此强烈建议诸君,熟练掌握脚本语言,这将对你的 ASP 程序开发大有帮助。由于本文不是 VBScript 教程,因此只能用较小的篇幅给大家简要介绍一些 VBScript 基本常识,在下一期介绍完 VBScript 的循环语句后,我们将正式开始学习 ASP 的内建对象,要深入 VBScript,建议大家找些教


在本文上两篇中,我们学习了脚本语言 VBScript 的变量、函数、过程和条件语句,本篇将继续给大家介绍 VBScipt 的循环语句,并对脚本语言在 ASP 中的应用加以总结。

   如果有人告诉你学习 ASP 不需要任何编程知识,那么他错了;如果我告诉你学习 ASP 必须掌握一门编程语言,那么我错了。ASP 动态服务器页面环境的特点就在于它是通过一种或几种脚本语言而写成的,脚本语言可以看作是编程语言的简化版,它易于学习和掌握,这给广大动态网站的设计者们提供了相当大的便利。可以这么说 : 脚本语言运用的得当与否直接关系到 ASP 应用程序的优与劣。继上一篇我们学习了脚本语言 VBScript 的函数和条件语句后,今天我们继续来看看 VBScript 中的循环语句。


循环语句的作用就是重复执行程序代码,循环可分为三类:一类在条件变为“假”之前重复执行语句,一类在条件变为“真”之前重复执行语句,另一类按照指定的次数重复执行语句。在 VBScript 中可使用下列循环语句:
   Do...Loop: 当(或直到)条件为“真”时循环。
   While...Wend: 当条件为“真”时循环。
   For...Next: 指定循环次数,使用计数器重复运行语句。
   For Each...Next: 对于集合中的每项或数组中的每个元素,重复执行一组语句。
   我们先来看看 Do...Loop,它是可以多次(次数不定)运行语句块。当条件为“真”时或条件变为“真”之前,重复执行语句块。请看下例:   < html>< head>
  < title>DoLoop.asp< /title>< body bgcolor="#FFFFFF">< /head>< p>< /p>
< p> 请将今年到本月为止的每个月份的销售结算记录填写在本页之上。< P>
  < %
  counter = 1
thismonth = month(now())
Do while counter < thismonth + 1
response.write " " & counter & " 月份 : "
response.write "______________________________" & "< BR>< br>"
If counter >13 then
  exit do
  end if
  counter = counter+1
Loop
  %>
  < hr>< /body>< /html>


   这段 ASP 程序运用循环语句制作了一张销售结算记录表,将以上代码剪贴至记事簿保存为 DoLoop.asp,并在浏览器中以 HTTP 方式进行浏览,根据当前的月份的不同,你将看到如下图的结果。

  

  我们来分析一下此段程序,我们的目的是要根据当前的月份打印一张表格,首先我们建立一个计数器“count”并将其值设为 1,然后我们用函数 month() 和 now() 得到当前的月份,最后建立循环,当 count 的值小于当前月份的值加 1 的时候,即显示月份值及一条横线并将 count 的值加 1,循环语句重复执行直到以上条件为假时退出循环。其中如果 count 大于 13 则用 exit do 立即退出循环。
  Do Loop 语句还可以使用以下语法:

  Do

  [statements][Exit Do]

  [statements]Loop [{While Until} condition]

   While...Wend 语句是为那些熟悉其用法的用户提供的。但是由于 While...Wend 缺少灵活性,所以建议最好使用 Do...Loop 语句。下面我们来看看 For Next 语句。For...Next 语句用于将语句块运行指定的次数,在循环中使用计数器变量,该变量的值随每一次循环增加或减少。

   下面的示例将过程 MyProc 重复执行 50 次。For 语句指定计数器变量 x 及其起始值与终止值。Next 语句使计数器变量每次加 1。    Sub DoMyProc50Times()
   Dim x
   For x = 1 To 50
   MyProc
   Next
   End Sub

   关键字 Step 用于指定计数器变量每次增加或减少的值。在下面的示例中,计数器变量 j 每次加 2。循环结束后,total 的值为 2、4、6、8 和 10 的总和。    Sub TwosTotal()
   Dim j, total
   For j = 2 To 10 Step 2
   total = total + j
   Next
   MsgBox " 总和为 " & total & "。"
   End Sub

   要使计数器变量递减,可将 Step 设为负值。此时计数器变量的终止值必须小于起始值。在下面的示例中,计数器变量 myNum 每次减 2。循环结束后,total 的值为 16、14、12、10、8、6、4 和 2 的总和。   Sub NewTotal()
   Dim myNum, total
   For myNum = 16 To 2 Step -2
   total = total + myNum
   Next
   MsgBox " 总和为 " & total & "。"
   End Sub

   Exit For 语句用于在计数器达到其终止值之前退出 For...Next 语句。因为通常只是在某些特殊情况下(例如在发生错误时)要退出循环,所以可以在 If...Then...Else 语句的 True 语句块中使用 Exit For 语句。如果条件为 False,循环将照常运行。

   最后,让我们来看看 For Each...Next 语句 ,For Each...Next 循环与 For...Next 循环类似。For Each...Next 不是将语句运行指定的次数,而是对于数组中的每个元素或对象集合中的每一项重复一组语句。这在不知道集合中元素的数目时非常有用。它的语法如下:    For Each element In group
   [statements]
   [Exit For]
   [statements]Next [element]

   如果 group 中有至少一个元素,就会进入 For Each 块执行。一旦进入循环,便首先对 group 中第一个元素执行循环中的所有语句。只要 group 中还有其他的元素,就会对每个元素执行循环中的语句。当 group 中没有其他元素时退出循环,然后从 Next 语句之后的语句继续执行。

   至此,我们已经完成了对脚本语言 VBScript 所有的基本知识的学习,但是仅凭阅读现有的这几篇文章你是无法熟练运用 VBScript 的,你必须通过不断的实践来提高自己的等级。当然,如果你熟悉 C,你也可以选择JavaScript 来作为 ASP 应用程序的脚本语言。不知大家有没有发现 ASP 程序的调试比较困难,因为没有什么现成的工具,在这里我向大家简要介绍一下 Microsoft Script Debugger,我们可以运用它来进行一定量的程序调试工作。

  IIS4.0 所包括的 Microsoft Script Debugger(Script 侦错工具),提供脚本程序的侦错功能。您可以使用 Microsoft Script 侦错工具来进行对使用 VBScript、JScript 编写的脚本程序,以及 Java applets、beans 和 ActiveX 组件的侦错工作。

   有的脚本程序在用户端浏览器执行,有的脚本程序?lt; % … %> 中的部份)在服务器端执行。 Microsoft Script Debugger,可以侦错用户端执行的脚本程序以及服务器端执行脚本程序。    在用户端浏览器执行的脚本程序是在用户端的浏览器当中执行,包括在标准 HTML 代码中的 VBScript、Jscript 部份。在浏览器载入此 HTML 代码或譬如按下按钮触发事件时,将执行此包括脚本程序的 HTML 代码。用户端浏览器执行的脚本程序,主要用于对 HTML 表单输入的基本检查等功能。
   在服务器端执行的脚本程序是在 IIS 服务器端执行,包括在 .asp 程序中。先在 IIS 服务器上执行,执行结果产生标准的 HTML 代码,再传送到用户端浏览器。服务器端执行的脚本程序,主要用于多个网页之间的连结,HTML 表单输入的处理,以及存取服务器上数据库的资料等。

   Microsoft Script Debugger 提供以下的除错功能:

   1、设定中断点

   2、逐步追踪脚本程序。

   3、设定书签。

   4、检视呼叫堆叠。

   5、检视和更改变数值。

   6、执行脚本指令。

   从下一篇开始,我们将开始学习 ASP 的内建对象,敬请关注。


从本篇开始作者从 ASP 内建对象着手,为大家详细剖析 ASP 的六个内建对象和各种组件的特性和方法。

    在正式开始学习 ASP 的内建对象和组件之前,先让我们来认识一些基本概念,这将对各位今后的学习大有帮助。请看下表 :

Active Server 随 Windows NT 交付的服务器方技术的集合。这些 技术为组件应用程序管理、数据库访问、事务和消息 提供一致的服务器方组件、脚本模型和一套集成的系 统服务。  
Active Server Pages (ASP) 在服务器上运行 ActiveX 脚本和 ActiveX 组件的服 务器方脚本环境。开发人员可以将脚本和组件结合在 一起创建基于 Web 的应用程序。


ActiveX 允许开发人员为 World Wide Web 创建交互式组件的 内涵丰富的 Microsoft 技术术语。允许用不同语言编写的软 件组件在网络环境中一起工作的一组不依赖语言的 互操作技术。ActiveX 的关键元素是组件对象模型 (COM) 和 分布组件对象模型 (DCOM)。这些技术已得到开放组织的 许可,已移植到许多平台上。
ADO Active 数据对象。为基于 Internet 以数据为中心的 应用程序而优化的一组基于对象的数据访问接口。ADO 基于已发布的规范并且随带在 Microsoft Internet Information Server 和 Microsoft Visual InterDev 中。
DSN 数据源名称。开放式数据库接口 (ODBC)用于引 用访问数据所需的驱动程序或其他信息的逻辑名称。Internet信 息服务器用于连接到 ODBC 数据源(如 SQL Server 数据库)的 名称。
event: 事件 由用户或 ActiveX 控件产生的程序响应的任何 操作。一般事件包括按键盘键、通过使用鼠标单击选 择按钮和其他鼠标操作。编程人员编写响应这些操作 的代码。  
object: 对象 在面向对象编程中,由当作完整实体的操作 和数据组成的变量。对象是基于特定模型的,在对象 中客户使用对象的服务通过由一组方法或相关函数 的接口访问对象的数据。然后客户端可以调用这些方 法执行某中操作。
ODBC 开放式数据库接口。允许应用程序从各种跨 平台数据访问的已有数据源标准规格中访问数据的 应用程序编程接口。  
SQL 结构化查询语言 Structured Query Language。定义和访 问关系型数据库的国际标准。  
  
   什么是对象?它可不是指你恋爱的男伴或女伴。在面向对象编程中,对象就是指由当作完整实体的操作和数据组成的变量。对象是基于特定模型的,在对象中客户使用对象的服务通过由一组方法或相关函数的接口访问对象的数据,然后客户端可以调用这些方法执行某中操作。ActiveX 组件是建立 Web 应用程序的关键,组件提供了在脚本中执行任务的对象。ActiveX 组件是一个文件,该文件包含执行某项或一组任务的代码,由于组件可以执行公用任务,这样程序员们就不必自己去创建执行这些任务的代码。可以利用组件作为脚本和基于 Web 应用程序的基本构造块。只要知道如何访问组件提供的对象,即使是位编写脚本的新手,也可以在不了解组件运作方式的情况下编写脚本。总之,组件使您不用学习编程就能够编写强大的脚本。组件是包含在动态链接库 .dll 或可执行文件 .exe 中的可执行代码。组件可以提供一个或多个对象以及对象的方法和属性。要使用组件提供的对象,请创建对象的实例并将这个新的实例分配变量名。使用 ASP 的 Server.CreateObject 方法可以创建对象的实例,使用脚本语言的变量分配指令可以为对象实例命名。如下例:
   Set db=Server.CreateObject("ADODB.Connection")

   这里的变量 db 就是 ASP 程序创建的访问数据库的对象实例。

   Active Server Pages 提供了可在脚本中使用的内建对象。这些对象使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用户信息 , 从而使对象开发者摆脱了很多烦琐的工作。目前的 ASP 版本总共提供了六个内建对象,下面让我们将通过实例分别来进行学习。

   一、Request 对象

   可以使用 Request 对象访问任何基于 HTTP 请求传递的所有信息,包括从 HTML 表格用 POST 方法或 GET 方法传递的参数、cookie 和用户认证。Request 对象使您能够访问客户端发送给服务器的二进制数据。

   Request 的语法 :

   Request[. 集合 属性 方法 ]( 变量 )

   在这里作者将挑选一些常用的对象语法进行分析

   1、Form

   Form 集合通过使用 POST 方法的表格检索邮送到 HTTP 请求正文中的表格元素的值。

   语法

   Request.Form(element)[(index).Count]

   参数

   element 指定集合要检索的表格元素的名称。

   index 可选参数,使用该参数可以访问某参数中多个值中的一个。它可以是 1 到 Request.Form(parameter).Count 之间的任意整数。

   Count 集合中元素的个数

   Form 集合按请求正文中参数的名称来索引。Request.Form(element) 的值是请求正文中所有 element 值的数组。通过调用 Request.Form(element).Count 来确定参数中值的个数。如果参数未关联多个值,则计数为 1。如果找不到参数,计数为 0。要引用有多个值的表格元素中的单个值,必须指定 index 值。index 参数可以是从 1 到 Request.Form(element).Count 中的任意数字。如果引用多个表格参数中的一个,而未指定 index 值,返回的数据将是以逗号分隔的字符串。
   可以使用重述符来显示表格请求中的所有数据值。例如,用户通过指定几个值填写表格,见下图。


 

   对于 hobby 参数,您可以使用下面的脚本检索这些值。  < html>   < head>< title>< /title>< /head>   < body>   < p> 请填写你的爱好 < /p>   < form method="POST" action="form.asp">   < p>< input type="text" name="hobby" size="20">< br>   < input type="checkbox" name="hobby" value=" 足球 "> 足球 < input type="checkbox"   name="hobby" value=" 乒乓球 "> 乒乓球 < /p>   < p>< input type="submit" value=" 发送 " name="B1">< input type="reset" value=" 重填 "   name="B2">< /p>   < /form>   < %   For Each i In Request.Form("hobby")   Response.Write i & "< BR>"   Next   %>   < /body>< /html>

   将以上代码剪贴到记事簿中(注意将“< ”后面的空格去掉),保存为 form.asp 文件并运行,request 对象可以根据你在 form 中填入或选择元素内容的不同将元素逐个显示出来。

   当然使用 For...Next 循环也可以生成同样的输出,如下所示 :

  < %

  For i = 1 To Request.Form("hobby").Count

  Response.Write Request.Form("hobby")(i) & "< BR>"Next

  %>

   2、QueryString

   QueryString 集合检索 HTTP 查询字符串中变量的值 ,HTTP 查询字符串由问号 (?) 后的值指定。如:

   < A HREF= "example.asp?string=this is a sample">string sample< /A>

   生成值为 "this is a sample" 的变量名字符串。通过发送表格或由用户在其浏览器的地址框中键入查询也可以生成查询字符串。

   语法

   Request.QueryString(variable)[(index).Count]

   QueryString 集合可以让您以名称检索 QUERY_STRING 变量。Request.QueryString( 参数 ) 的值是出现在 QUERY_STRING 中所有参数的值的数组。通过调用Request.QueryString(parameter).Count 可以确定参数有多少个值。

   我们也可以使用 QueryString 来达到与前一个范例相同的功能。只需要将 request.form 部分替换如下:

  < %

  For Each i In Request.querystring("hobby")

  Response.Write i & "< BR>"

  Next

  %>

   3、Cookies

   什么是 Cookie?Cookie 其实是一个标签,当你访问一个需要唯一标识你的站址的 WEB 站点时,它会在你的硬盘上留下一个标记,下一次你访问同一个站点时,站点的页面会查找这个标记。每个 WEB 站点都有自己的标记,标记的内容可以随时读取,但只能由该站点的页面完成。每个站点的 Cookie 与其他所有站点的 Cookie 存在同一文件夹中的不同文件内(你可以在 Windows 的目录下的 Cookie 文件夹中找到它们)。一个 Cookie 就是一个唯一标识客户的标记,Cookie 可以包含在一个对话期或几个对话期之间某个 WEB 站点的所有页面共享的信息,使用 Cookie 还可以在页面之间交换信息。Request 提供的 Cookies 集合允许用户检索在 HTTP 请求中发送的 cookie 的值。这项功能经常被使用在要求认证客户密码以及电子公告板、WEB 聊天室等 ASP 程序中。
   语法

   Request.Cookies(cookie)[(key).attribute]

   参数

   cookie 指定要检索其值的 cookie。

   key 可选参数,用于从 cookie 字典中检索子关键字的值。

   attribe 指定 cookie 自身的有关信息。如:HasKeys 只读,指定 cookie 是否包含关键字。

   可以通过包含一个 key 值来访问 cookie 字典的子关键字。如果访问 cookie 字典时未指定 key,则所有关键字都会作为单个查询字符串返回。例如,如果 MyCookie 有两个关键字 , First 和 Second,而在调用 Request.Cookies 时并未指定其中任何一个关键字,那么将返回下列字符串。
   First=firstkeyvalue&Second=secondkeyvalue

   如果客户端浏览器发送了两个同名的 cookie,那么 Request.Cookie 将返回其中路径结构较深的一个。例如,如果有两个同名的的 cookie,但其中一个的路径属性为 /www/ 而另一个为 /www/home/,客户端浏览器同时将两个 cookie 都发送到 /www/home/ 目录中,那么 Request.Cookie 将只返回第二个 cookie。
   要确定某个 cookie 是不是 cookie 字典(cookie 有否有关键字),可使用下列脚本。

   < %= Request.Cookies("myCookie").HasKeys %>

   如果 myCookie 是一个 cookie 字典,则前面的赋值为 TRUE。否则,为 FALSE。下面我们来看看一个 cookie 的应用实例:

  < %

  nickname=request.form("nick")response.cookies("nick")=nickname

' 用 response 对象将用户名写入 Cookie 之中

response.write " 欢迎 "&request.cookies("nick")&" 光临小站!"

%>

  < html>< head>< meta http-equiv="Content-Type" content="text/html; charset=gb2312">

< title>cookie< /title>

  < meta name="GENERATOR" content=" Microsoft FrontPage 3.0">< /head>

  < body>

  < form method="POST" action="cookie.asp">

  < p>< input type="text" name="nick" size="20">

< input type="submit" value=" 发送 " name="B1">< input type="reset" value=" 重填 " name="B2">< /p>< /form>

  < /body>< /html>

   这其实是一个在基于 WEB 的 BBS 或 CHAT 的 ASP 程序中常用的手法,它将用户在起始页面上填入的姓名保存在 cookie 中,这样后面的程序就可以很容易地调用该用户的 nick 了。

   4、ServerVariables

   大家都知道在浏览器中浏览网页的时候使用的传输协议是 HTTP,在 HTTP 的标题文件中会记录一些客户端的信息,如 : 客户的 IP 地址等等,有时服务器端需要根据不同的客户端信息做出不同的反映,这时候就需要用 ServerVariables 集合获取所需信息。

   语法

   Request.ServerVariables ( 服务器环境变量 )

   由于服务器环境变量较多,作者仅将一些常用的变量在下表中列出 :

ALL_HTTP 客户端发送的所有 HTTP 标题文件。
CONTENT_LENGTH 客户端发出内容的长度。
CONTENT_TYPE 内容的数据类型。如:“text/html”。同附加信息 的查询一起使用,如 HTTP 查询 GET、POST 和 PUT。
LOCAL_ADDR 返回接受请求的服务器地址。如果在绑定多 个 IP 地址的多宿主机器上查找请求所使用的地址 时,这条变量非常重要。
LOGON_USER 用户登录 Windows NT 的帐号。
QUERY_STRING 查询 HTTP 请求中问号(?)后的信息。
REMOTE_ADDR 发出请求的远程主机 (client) 的 IP 地址。
REMOTE_HOST 发出请求的主机 (client) 名称。如果服务器无此 信息,它将设置为空的 MOTE_ADDR 变量。
REQUEST_METHOD 该方法用于提出请求。相当于用于 HTTP 的 GET、HEAD、POST等 等。
SERVER_NAME 出现在自引用 URL 中的服务器主机名、DNS 化名 或 IP 地址。
SERVER_PORT 发送请求的端口号。

   我们可以使用以下脚本打印出所有的服务器环境变量。

  < TABLE>

  < TR>< TD>< B>Server Variable< /B>< /TD>< TD>< B>Value< /B>< /TD>< /TR>< % For Each name In Request.ServerVariables %>

  < TR>< TD> < %= name %> < /TD>< TD> < %= Request.ServerVariables(name) %> < /TD>< /TR>< /TABLE>

  < % Next %>

   今天我们详细学习了 ASP 内建对象中的 request 对象,这也是 ASP 程序中使用最频繁的对象,希望大家在课后多多实践。



在上一篇中作者给大家详细介绍了 ASP 内建对象之一 Request 的使用方法,相信各位通过一系列的实践已经能够熟练掌握,本篇将继续给大家介绍 ASP 的另一个内建对象 Response。

   最近,有很多朋友来“妹儿”催我加快 ASP 篇一文的写作速度,并急切地询问哪里有关于 ASP 的教材。我深深地被大家的学习热情所打动,因此决定将自己平时所搜集的一些 ASP 信息资料拿出来和大家共享,也希望所有的朋友能慷慨地将自己搜集的有关 ASP 的资料告诉作者,谢谢。由于目前国内有关 ASP 的中文教材凤毛麟角,而专门针对 ASP 网站开发的中文教材作者更是闻所未闻(可能是作者孤陋寡闻),只是最近听说出了一本清华大学出版社出版的关于 MS InterDev 的傻瓜书,其中有 ASP 的教学,和一本 Active Server Page 2.0 的中文手册,因此目前作者还是主要通过国外网站来获取 ASP 的有关信息和资料,这也是作者写本文的一个主要原因。下面我就将 bookmark 中的一些较经典的 ASP 站点罗列出来:


1、http://www.activeserverpage.com/
   这是作者访问最频繁的 ASP 网站,也是世界上最大最全的关于 ASP 的网站之一,它里面不但有最新的 ASP 文献资料,免费组件,还有一本完整的 ASP 入门教材,它更是 ASP 网站的中枢站点,通过它你可以到达无数的 ASP 相关站点。

   2、http://www.asphole.com/

   这本是一个针对 ASP 漏洞而建立的站点,但是它却无疑是一个完备的 ASP 信息站点,它非但提供了 ASP 的文章,及组件还提供详尽透彻的联接地址。

   3、http://www.15seconds.com/faqhttp://www.15seconds.com/search

   这是一个作者所看到的最大的网上 ASP 交流站点,它拥有 ASP 解疑的答案,ASP 邮件清单信息,ASP 技巧,你可能需要需要几个月的时间才能读完这些信息。而在 http://www.15seconds.com/AllComponents.asp 你可以读到最新的 ActiveX 组件和大量免费组件的详细介绍,并附有非常实用的文档与例子。

   4、http://www.microsoft.com/workshop/server/asp/aspfeat.asp

   大家都知道 Active Server Page 是 微软提出的一套基于 NT IIS 的 WEB 服务器端环境,那么这个由 微软自己建立的 ASP 技术说明站点,大家当然是不可不看的。

   5、http://www.serverobjects.com/

   在这里你可以获得无数实用的 ActiveX 组件 , 并下载它们的试用版,只可惜其中的大部分极好的组件都是要 Money 的。

   6、http://www.cyscape.com/asp/browscap/

   大家还记得作者在 ASP2 一文中介绍的那个用来辨别客户端浏览器版本的 Browser Capabilitie 组件吗?在这个站点你可以获得最新的 BROWSCAP.INI 文件,它拥有每一个 ASP 安装时 微软没有提供的浏览器的信息,这样你在 ASP 中判断客户浏览器是就能够万无一失了。

   7、http://www.microsoft.com/data/ado/

   ASP 最强大且便捷的功能莫过于同数据库的连接,通过 ASP 内建的 ActiveX 组件,我们可以轻而易举的将 WEB 与所有和 ODBC 兼容的数据库连接起来,在这个 微软的站点上你可以获取很多实用的 ADO 资料。

   8、http://www.cobb.com/m_sbn4/

   一个不错的 ASP 论坛,你可以在那里贴你的问题,读取别人的问题和解答。

   下面,我们开始学习 ASP 的另一个内建对象 Response。

   与 Request 是获取客户端 HTTP 信息相反 ,Response 对象是用来控制发送给用户的信息,包括直接发送信息给浏览器、重定向浏览器到另一个 URL 或设置 cookie 的值。

   语法

   Response.collectionpropertymethod

   一、属性

   1、Buffer

   Buffer 属性指示是否缓冲页输出。当缓冲页输出时,只有当前页的所有服务器脚本处理完毕或者调用了 Flush 或 End 方法后,服务器才将响应发送给客户端浏览器,服务器将输出发送给客户端浏览器后就不能再设置 Buffer 属性。因此应该在 .asp 文件的第一行调用 Response.Buffer。

   2、Charset

   Charset 属性将字符集名称附加到 Response 对象中 content-type 标题的后面。对于不包含 Response.Charset 属性的 ASP 页,content-type 标题将为 :content-type:text/html。

   我们可以在 .asp 文件中指定 content-type 标题,如 :

   < % Response.Charset="gb2312") %>

   将产生以下结果 :

   content-type:text/html; charset=gb2312

   注意,无论字符串表示的字符集是否有效,该功能都会将其插入 content-type 标题中。且如果某个页包含多个含有 Response.Charset 的标记,则每个 Response.Charset 都将替代前一个 CharsetName。这样,字符集将被设置为该页中 Response.Charset 的最后一个实例所指定值。

   3、ContentType

   ContentType 属性指定服务器响应的 HTTP 内容类型。如果未指定 ContentType,默认为 text/HTML。

   4、Expires

   Expires 属性指定了在浏览器上缓冲存储的页距过期还有多少时间。如果用户在某个页过期之前又回到此页,就会显示缓冲区中的页面。如果设置 response.expires=0,则可使缓存的页面立即过期。这是一个较实用的属性,当客户通过 ASP 的登陆页面进入 WEB 站点后,应该利用该属性使登陆页面立即过期,以确保安全。

   5、ExpiresAbsolute

   与 Expires 属性不同 ExpiresAbsolute 属性指定缓存于浏览器中的页面的确切到期日期和时间。在未到期之前,若用户返回到该页,该缓存中的页面就显示。如果未指定时间,该主页在当天午夜到期。如果未指定日期,则该主页在脚本运行当天的指定时间到期。如下示例指定页面在 1998 年 12 月 10 日上午 9:00 分 30 秒到期。

   < % Response.ExpiresAbsolute=#Dec 12,1998 9:00:30# %>

   二、方法

   1、Clear

   可以用 Clear 方法清除缓冲区中的所有 HTML 输出。但 Clear 方法只清除响应正文而不清除响应标题。可以用该方法处理错误情况。但是如果没有将 Response.Buffer 设置为 TRUE,则该方法将导致运行时错误。

   2、End

   End 方法使 Web 服务器停止处理脚本并返回当前结果。文件中剩余的内容将不被处理。如果 Response.Buffer 已设置为 TRUE,则调用 Response.End 将缓冲输出。

   3、Flush

   Flush 方法立即发送缓冲区中的输出。如果没有将 Response.Buffer 设置为 TRUE,则该方法将导致运行时错误。

   4、Redirect

   Redirect 方法使浏览器立即重定向到程序指定的 URL。这也是一个我们经常用到方法,这样程序员就可以根据客户的不同响应,为不同的客户指定不同的页面或根据不同的情况指定不同的页面。一旦使用了 Redirect 方法任何在页中显式设置的响应正文内容都将被忽略。然而,此方法不向客户端发送该页设置的其他 HTTP 标题,将产生一个将重定向 URL 作为链接包含的自动响应正文。Redirect 方法发送下列显式标题,其中 URL 是传递给该方法的值。如:

   < % Response.redirect("www.chinabyte.com") %>

   5、Write

   Write 方法是我们平时最常用的方法之一,它是将指定的字符串写到当前的 HTTP 输出。

   三、集合

   Response 对象只有一个集合 --Cookie

   Cookies 集合设置 cookie 的值。若指定的 cookie 不存在,则创建它。若存在,则设置新的值并且将旧值删去。

   语法

   Response.Cookies(cookie)[(key).attribute]=value

   这里的 cookie 是指定 cookie 的名称。而如果指定了 key,则该 cookie 就是一个字典。attribute 指定 cookie 自身的有关信息。attribute 参数可以是下列之一 :

   Domain 若被指定,则 cookie 将被发送到对该域的请求中去。

   Expires 指定 cookie 的过期日期。为了在会话结束后将 cookie 存储在客户端磁盘上,必须设置该日期。若此项属性的设置未超过当前日期,则在任务结束后 cookie 将到期。

   HasKeys 指定 cookie 是否包含关键字。

   Path 若被指定,则 cookie 将只发送到对该路径的请求中。如果未设置该属性,则使用应用程序的路径。

   至此,我们已经学习的 Response 对象的所有属性、方法和集合的理论知识,下面作者将给大家演示一段简单的程序,通过实践让大家加深理解。先将以下程序剪贴到记事簿中,并保存为 asp7.asp。( 注意将 < 和 % 之间的空格去掉 !!!)
  < %
  Dim user
Dim flag
Dim pwd
  Dim say
Response.buffer=true ' 开启缓冲页面功能
Response.ContentType="text/HTML"
  Response.Charset="gb2312"
  user=Request.Form("username")
pwd=Request.Form("password")
say=Request.QueryString("say")
%>
  < form method="POST" action="asp7.asp">
  < p> 用户名 :< input type="text" name="username" size="12">< br>
  口 令 :< input type="password" name="password" size="12">< br>
  < input type="submit" value=" 提交 " name="B1">< input type="reset" value=" 取消 " name="B2">< /p>< /form>
  < %
  If say=1 then
  Response.Write " 欢迎书生大驾光临 !"
End If
  If say > 1 then
  Response.Write " 欢迎再次光临书生的 ASP 网站 !"
End If
  If user="Adm" and pwd="shusheng" Then
  Response.Expires=1 ' 设置该页面在浏览器的缓冲中存储 1 分钟后过期。
  flag=1
  ElseIf user="guest" and pwd="guest" Then
  Response.Expires=0 ' 使缓存的页面立即过期。
  Response.Clear ' 清空存储在缓存中的页面
  flag=2
  ElseIf user="vip" and pwd="vip" Then
  Response.Write " 欢迎 VIP 光临书生的 ASP 网站 "
  flag=3
  Else
  flag=0
  Response.End ' 立即停止脚本处理,并将缓存中的页面输出
End If
  Response.write "< p>< a href='asp7b.asp?flag="&flag&"'> 动态网站设计十八般武艺 --ASP 篇 (7) 实践练习 < /a>< /p>"
' 将变量 flag 的值传送给 asp7b.asp
  %>
  < p> 动态网站设计十八般武艺 --ASP 篇 (7) 实践练习 < /p>
   再将以下程序保存为 asp7b.asp。
  < %
  Dim saysay=Request.QueryString("flag")
Select case say
  case "1"
  Response.Redirect "asp7.asp?say=1"
case "2"
  Response.Redirect "asp7.asp?say=2"
case "3"
  Response.Redirect "asp7.asp?say=3"
case "0"
  Response.Redirect "asp7.asp?say=0"
End Select
  %>

   将这两个程序放在有执行权限的 WEB 虚拟目录下,并以 http 方式访问 asp7.asp。在这两个程序中我们充分运用了至今为止所学过的两个 ASP 内建对象 :Request 和 Response。当你第一次访问 asp7.asp 文件时,页面上出现一个 Form 并提示输入用户名和口令,如果你输入用户名 :Adm、口令 :shusheng, 则会出现如下页面 :


 

   如果你输入用户名 :guest、口令 :guest, 则仅出现如下页面 :


 

   这是为什么呢?因为我们设置了页面缓存,当使用 guest 登陆时,判断程序自动清空其之前所有存储在缓存中的页面,而仅将其后脚本程序执行的结果显示出来。

   那为什么第一次登陆 asp7.asp 页面时仅仅只显示一个 Form 对话框呢?因为此时程序判断到用户既非 Adm, 也不是 guest 和 vip,所以执行 Response.End, 立即将存储在缓存中的 Form 显示出来,并停止其后的一切脚本处理,包括纯 HTML 代码的显示。

   无论你是用 Adm 还是 guest 或 vip 登陆该页面你都可以看到一个超链,该超链指向文件 asp7b.asp,当我们点击该超链时,asp7.asp 将变量 flag 的值作为参数发送给 asp7b.asp, 而后者则根据该参数的值来做出判断,并依据不同情况使用 Response.Redirect 再强行返回 asp7.asp, 并也将一个变量 say 的值作为参数发送给 asp7.asp。如此一来,asp7.asp 又会根据此参数来做出不同的反应。

   大家现在都看到了我们仅仅用了两个很简单的程序,就可以做到对同一个页面的多种不同显示结果,这正是 ASP 的魅力所在,各位可以以此示范程序为基础,来进行一些改动,以熟练掌握我们所学的这两个内建对象。今天的课程就到此为止了。下一篇我们将继续学习另一个 ASP 内建对象,敬请关注。

(出处:http://www.Gimoo.net)

推荐阅读

 

热点信息

 
强悍的草根IT技术社区,这里应该有您想要的! 友情链接:b2b电子商务
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP备05050695号