?ASP教程:第三篇ASP基础
  本文ASP篇(1)展示了ASP动态网站设计的一些最基本的方法,相信通过实践各位对ASP已经有了最基本的了解,本篇在答复大家所提问题的同时,将进一步介绍ASP动态网站的一些基本技巧。
  自本文第一篇刊登后
  络绎不绝地收到了一些朋友的来信,出乎作者的意料,其中有相当一部分是初次接触ASP,因此有许多朋友都提出为何在浏览器中浏览ASP篇(1)中的范例时看到的竟然是原代码?由于遇到此问题的朋友较多,故作者在此一并回答。首先,我要再次强调ASP是一套服务器端的脚本环境,当用户从浏览器向Web服务器请求.asp文件时,ASP脚本开始运行,然后Web服务器调用ASP,ASP全面读取请求的文件,执行所有脚本命令,并将Web页传送给浏览器,这就意味着你不能简单地在现有的操作系统(如Win95、98)下,用浏览器中的"打开"命令来浏览.asp文件;其次,运行.asp文件需要服务器端的支持,目前除了WindowsNT下的MicrosoftInternetInformationServer支持ActiveServer技术外,ActiveServer还可用于MSWindowsNTWorkstation和MSWindows95/98中的PersonalWebServer的构件,因此无论你安装的是NT还是WIN95/98,都必须在原系统上安装支持ASP的服务器端环境,才能使你的机器得以运行.asp文件。由于目前绝大多数朋友安装的是Win95或是98,因此作者就在这里着重介绍如何在Win95/98下运行和浏览.asp文件。因为MSPersonalWebServer支持通用网关接口(CGI)应用程序、Internet数据库接口(IDC)应用程序和IIS应用程序接口(ISAPI)应用程序,并且支持运行和开发ASP应用程序,所以使得Win95及其以后操作平台具备了近似于NT的健全的网站运作和管理功能。你所要做的只是在现有的Win95/98系统上安装MSPersonalWebServer,建议安装最新的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。
  Helvetica">
  Dimbc
  Setbc=Server.CreateObject("MSWC.BrowserType")
  %>
  用http方式浏览该文件,根据使用的浏览器的不同,你会看到类似下图(Asp2b.gif)的页面。在本例中我们用到了一个ASP提供的ActiveX组件--"BrowserCapabilities"。ActiveX组件作为基于Web的应用程序部分在Web服务器上运行,组件提供了应用程序的主要功能(如访问、修改数据库等),这样WEB设计者们就不必创建或重新创建执行这些任务的代码,从而提高了工作的效率,有关ActiveX组件将在今后详细讨论。为了使用ASP辨别客户浏览器,在这里我们利用"BrowserCapabilities"组件创建了一个BrowserType对象,该对象提供带有客户端网络浏览器功能说明的用户脚本,当浏览器连接到网络服务器上时,它会自动发送一个UserAgentHTTP标题,该标题是一个声明浏览器及其版本的ASCII字符串。此BrowserType对象将该标题和在Browscap.ini文件中的项进行比较(Win98、IIS3、IIS4的用户分别可以在以下目录中"win98\system\inersrv"、"\winnt\system32\inetsrv\asp\cmpnts"、"\winnt\system32\inetsrv"找到该文件)。如果找到匹配的项,则该BrowserType对象将认为浏览器列表属性与UserAgent标题匹配。若该对象在browscap.ini文件中找不到与该标题匹配的项,那么将使用默认的浏览器属性。若该对象既未找到匹配项且browscap.ini文件中也未指定默认的浏览器设置,则它将每个属性都设为字符串"UNKNOWN"。我们可以通过更新browscap.ini文件将属性或新的浏览器定义添加到该组件中,从而扩大ASP识别的浏览器范围和精确度。下面列出了browscap.ini中的一部分内容(不包括注释部分):
  [IE4.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预测的ChannelDefinitionFormat。
  ;;ie4.01
  [Mozilla/4.0(compatible;MSIE4.01*;Windows95)]
  parent=IE4.0;;父标签允许第二个浏览器继承第一个浏览器的定义
  version=4.01
  minorver=01
  platform=Win98
  ;;DefaultBrowser;;指定默认的浏览器的设置
  [DefaultBrowserCapabilitySettings]
  browser=Default
  frames=FALSE
  tables=TRUE
  cookies=FALSE
  backgroundsounds=FALSE
  vbscript=FALSE
  javascript=FALSE
  在上面的例子中,父标签允许第二个浏览器继承第一个浏览器的定义,以便MicrosoftInternetExplorer4.01定义得以继承MicrosoftInternetExplorer4.0定义全部的属性(例如,frames=TRUE、tables=TRUE以及cookies=TRUE)。并通过添加platform=Win98行来指定平台,用version=4.01重写版本信息。
  在先前的browser.asp中我们仅仅是将客户浏览器的属性一一罗列了出来,下面让我们添加一些动态的效果。将以下代码剪贴到文件browser.asp中(编辑注:为显示方便,所有“
  你的浏览器支持框架!
  难道现在你还在使用不支持框架的浏览器???
  你的浏览器支持表格。
  难道现在你还在使用不支持表格的浏览器???
  有没有听到美妙的音乐???
  可惜
  您的浏览器不支持背景音乐。
  您的浏览器支持Vbscript。
  您的浏览器不支持Vbscrip。
  您的浏览器支持Javascript。
  您的浏览器不支持Javascript。
  在你的浏览器中刷新browser.asp,程序将自动辨别浏览器的属性并动态显示不同的信息。不难发现在整个browser.asp文件中几乎没有用到任何复杂的编程,就轻而易举的达到了动态鉴别客户浏览器并动态产生响应事件的效果。事实上,这个程序的关键就在于前文提到的ActiveX组件--"BrowserCapabilities",它的作用类似于一个Function,只需简单地在程序中调用该组件即能达到你所希望的效果。
  通过这两篇对ASP的介绍,大家已经看到编写ASP程序是相当轻松的,要掌握ASP,无非就是掌握ASP内置的五个对象,以及ASP提供的ActiveX组件的对象、方法和属性,当然扎实的脚本语言编写能力也是必须的。在今后的课程中作者将用五到六篇的篇幅着重介绍这些内置对象和组件的作用及使用方法,敬请关注。
优优书萌 uutxT.COM 荃文吇坂粤镀
第二卷 第一章
  {WsErr}
UU书擝 uUTxT.coM 诠蚊吇坂月渎
第三卷 第一章
  ?ASP教程:第五篇脚本变量、函数、过程和条件语句
  在上一期中作者向诸位简要介绍了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*frommessageWheremessage.creatimeBetween#"&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语句
  SelectCase语句
  If...Then...Else语句用于计算条件是否为True或False,并且根据计算结果指定要运行的语句。通常,条件是使用比较运算符对值或变量进行比较的表达式,If...Then...Else语句可以按照需要进行嵌套。
  让我们来创建两个范例文件:if1.asp和if2.asp
  将以下语句剪贴到记事簿中,并保存为if1.asp(注意:请将程序中“
  YourFirstName
  YourLastName
  将以下语句剪贴到记事簿中,并保存为if2.asp
  lname=request.querystring("Lastname")
  Iffname="George"andlname="Washington"then%>
  Hi.Youmustbethefirstpresident!
  Hi!NicetoMeetYou
  asp1.asp产生一个文本输入框,要求用户输入姓、名,如下图:
  asp2.asp则是用IF语句判断用户输入的姓名是否为“GeorgeWashington”,并做出相应的反馈。在此我们遇到了一个ASP的内建对象request,通过使用request对象可以访问任何用HTTP请求传递的信息,包括从HTML表格中用POST方法或GET方法传递的参数、cookie和用户认证。而QueryString集合检索HTTP查询字符串中变量的值,HTTP查询字符串由问号(?)后的值指定。如:
  生成值为"Firstname=George&Lastname=Washington"的变量名字符串。关于ASP对象作者将在今后的几篇里重点讲述。
  If...Then...Else语句的一种变形允许您从多个条件中选择,即添加ElseIf子句以扩充If...Then...Else语句的功能,使您可以控制基于多种可能的程序流程。
  我们将asp2.asp的程序部分扩充如下:
  fname=lcase(request.querystring("Firstname"))
  lname=lcase(request.querystring("Lastname"))
  Iffname="george"andlname="washington"then%>
  Hi.Youmustbethefirstpresident!
  Hi.Youmustbetheactorpresident!
  Hi.Youmustbethepeanutfarmerpresident!
  Hi.Yournameremindsmeofsomeone,butIamnotsurewho!
  Hi!NicetoMeetYou
  可以添加任意多个ElseIf子句以提供多种选择。但使用多个ElseIf子句经常会使程序变得很累赘。在多个条件中进行选择的更好方法是使用SelectCase语句。
  SelectCase结构提供了If...Then...ElseIf结构的一个变通形式,可以从多个语句块中选择执行其中的一个。SelectCase语句提供的功能与If...Then...Else语句类似,但是可以使代码更加简练易读。SelectCase结构在其开始处使用一个只计算一次的简单测试表达式。表达式的结果将与结构中每个Case的值比较。如果匹配,则执行与该Case关联的语句块,我们同样可以用SelectCase语句来写asp2.asp文件:
  fname=lcase(request.querystring("Firstname"))
  lname=lcase(request.querystring("Lastname"))
  name=fname+lname
  Selectcasename
  case"georgewashington"
  response.write"Hi.Youmustbethefirstpresident!"
  case"ronaldreagan"
  response.write"Hi.Youmustbetheactorpresident!"
  case"jimmycarter"
  response.write"Hi.Youmustbethepeanutfarmerpresident!"
  case"naokocharles"
  response.write"Hi.Yournameremindsmeofsomeone,butIamnotsurewho!"
  caseelse
  response.write"Hi!NicetoMeetYou"
  EndSelect%>
  请注意SelectCase结构只计算开始处的一个表达式,并且只计算一次,而If...Then...ElseIf结构计算每个ElseIf语句的表达式,这些表达式可以各不相同。因此仅当每个ElseIf语句计算的表达式都相同时,才可以使用SelectCase结构代替If...Then...ElseIf结构。SelectCase语句也是可以是嵌套的,每一层嵌套的SelectCase语句必须有与之匹配的EndSelect语句。
  以上给大家介绍的脚本语言VBScript的函数和条件语句的使用方法,由于篇幅的缘故不能详细展开,希望各位有志学习ASP的朋友,能在课后进行一定程度的自学和练习。在日常开发ASP应用程序的过程中作者本人日渐体会到了脚本语言的重要性,灵活运用脚本语言将非但可以大大提高ASP应用程序的开发过程,给广大网站制作人员节省大量的时间,而且还能够增强ASP应用程序的执行率和功能。欲善其事必先利其器,因此作者在此强烈建议诸君,熟练掌握脚本语言,这将对你的ASP程序开发大有帮助。由于本文不是VBScript教程,因此只能用较小的篇幅给大家简要介绍一些VBScript基本常识,在下一期介绍完VBScript的循环语句后,我们将正式开始学习ASP的内建对象,要深入VBScript,建议大家找些教材进行自学。如果你在看完本文后有任何问题请及时Mail我,如果你有什么好的建议也请来信告知,谢谢。
悠滺書盟 Uutxt.Com 诠蚊吇扳月镀
第四卷 第一章
  ?ASP教程:第六篇ASP脚本循环语句
  在本文上两篇中,我们学习了脚本语言VBScript的变量、函数、过程和条件语句,本篇将继续给大家介绍VBScipt的循环语句,并对脚本语言在ASP中的应用加以总结。如果有人告诉你学习ASP不需要任何编程知识,那么他错了;如果我告诉你学习ASP必须掌握一门编程语言,那么我错了。ASP动态服务器页面环境的特点就在于它是通过一种或几种脚本语言而写成的,脚本语言可以看作是编程语言的简化版,它易于学习和掌握,这给广大动态网站的设计者们提供了相当大的便利。可以这么说:脚本语言运用的得当与否直接关系到ASP应用程序的优与劣。继上一篇我们学习了脚本语言VBScript的函数和条件语句后,今天我们继续来看看VBScript中的循环语句。
  循环语句的作用就是重复执行程序代码,循环可分为三类:一类在条件变为“假”之前重复执行语句,一类在条件变为“真”之前重复执行语句,另一类按照指定的次数重复执行语句。在VBScript中可使用下列循环语句:
  Do...Loop:当(或直到)条件为“真”时循环。
  While...Wend:当条件为“真”时循环。
  For...Next:指定循环次数,使用计数器重复运行语句。
  ForEach...Next:对于集合中的每项或数组中的每个元素,重复执行一组语句。我们先来看看Do...Loop,它是可以多次(次数不定)运行语句块。当条件为“真”时或条件变为“真”之前,重复执行语句块。请看下例:
  counter=1
  thismonth=month(now())
  Dowhilecounter
  response.write""&counter&"月份:"
  response.write"______________________________"&""
  Ifcounter>13then
  exitdo
  endif
  counter=counter+1
  Loop
  %>
  这段ASP程序运用循环语句制作了一张销售结算记录表,将以上代码剪贴至记事簿保存为DoLoop.asp,并在浏览器中以HTTP方式进行浏览,根据当前的月份的不同,你将看到如下图的结果。
  我们来分析一下此段程序,我们的目的是要根据当前的月份打印一张表格,首先我们建立一个计数器“count”并将其值设为1,然后我们用函数month()和now()得到当前的月份,最后建立循环,当count的值小于当前月份的值加1的时候,即显示月份值及一条横线并将count的值加1,循环语句重复执行直到以上条件为假时退出循环。其中如果count大于13则用exitdo立即退出循环。
  DoLoop语句还可以使用以下语法:
  Do
  [statements][ExitDo]
  [statements]Loop[{While|Until}condition]
  While...Wend语句是为那些熟悉其用法的用户提供的。但是由于While...Wend缺少灵活性,所以建议最好使用Do...Loop语句。下面我们来看看ForNext语句。For...Next语句用于将语句块运行指定的次数,在循环中使用计数器变量,该变量的值随每一次循环增加或减少。
  下面的示例将过程MyProc重复执行50次。For语句指定计数器变量x及其起始值与终止值。Next语句使计数器变量每次加1。SubDoMyProc50Times()
  Dimx
  Forx=1To50
  MyProc
  Next
  EndSub
  关键字Step用于指定计数器变量每次增加或减少的值。在下面的示例中,计数器变量j每次加2。循环结束后,total的值为2、4、6、8和10的总和。SubTwosTotal()
  Dimj,total
  Forj=2To10Step2
  total=total+j
  Next
  MsgBox"总和为"&total&"。"
  EndSub
  要使计数器变量递减,可将Step设为负值。此时计数器变量的终止值必须小于起始值。在下面的示例中,计数器变量myNum每次减2。循环结束后,total的值为16、14、12、10、8、6、4和2的总和。SubNewTotal()
  DimmyNum,total
  FormyNum=16To2Step-2
  total=total+myNum
  Next
  MsgBox"总和为"&total&"。"
  EndSub
  ExitFor语句用于在计数器达到其终止值之前退出For...Next语句。因为通常只是在某些特殊情况下(例如在发生错误时)要退出循环,所以可以在If...Then...Else语句的True语句块中使用ExitFor语句。如果条件为False,循环将照常运行。
  最后,让我们来看看ForEach...Next语句,ForEach...Next循环与For...Next循环类似。ForEach...Next不是将语句运行指定的次数,而是对于数组中的每个元素或对象集合中的每一项重复一组语句。这在不知道集合中元素的数目时非常有用。它的语法如下:ForEachelementIngroup
  [statements]
  [ExitFor]
  [statements]Next[element]
  如果group中有至少一个元素,就会进入ForEach块执行。一旦进入循环,便首先对group中第一个元素执行循环中的所有语句。只要group中还有其他的元素,就会对每个元素执行循环中的语句。当group中没有其他元素时退出循环,然后从Next语句之后的语句继续执行。
  至此,我们已经完成了对脚本语言VBScript所有的基本知识的学习,但是仅凭阅读现有的这几篇文章你是无法熟练运用VBScript的,你必须通过不断的实践来提高自己的等级。当然,如果你熟悉C,你也可以选择JavaScript来作为ASP应用程序的脚本语言。不知大家有没有发现ASP程序的调试比较困难,因为没有什么现成的工具,在这里我向大家简要介绍一下MicrosoftScriptDebugger,我们可以运用它来进行一定量的程序调试工作。
  IIS4.0所包括的MicrosoftScriptDebugger(Script侦错工具),提供脚本程序的侦错功能。您可以使用MicrosoftScript侦错工具来进行对使用VBScript、JScript编写的脚本程序,以及Javaapplets、beans和ActiveX组件的侦错工作。
  有的脚本程序在用户端浏览器执行,有的脚本程序(中的部份)在服务器端执行。MicrosoftScriptDebugger,可以侦错用户端执行的脚本程序以及服务器端执行脚本程序。在用户端浏览器执行的脚本程序是在用户端的浏览器当中执行,包括在标准HTML代码中的VBScript、Jscript部份。在浏览器载入此HTML代码或譬如按下按钮触发事件时,将执行此包括脚本程序的HTML代码。用户端浏览器执行的脚本程序,主要用于对HTML表单输入的基本检查等功能。
  在服务器端执行的脚本程序是在IIS服务器端执行,包括在.asp程序中。先在IIS服务器上执行,执行结果产生标准的HTML代码,再传送到用户端浏览器。服务器端执行的脚本程序,主要用于多个网页之间的连结,HTML表单输入的处理,以及存取服务器上数据库的资料等。
  MicrosoftScriptDebugger提供以下的除错功能:
  1、设定中断点
  2、逐步追踪脚本程序。
  3、设定书签。
  4、检视呼叫堆叠。
  5、检视和更改变数值。
  6、执行脚本指令。