技术 > asp
目录
概述
  asp是active server page的缩写,意为“活动服务器网页”。asp是微软公司开发的代替cgi脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单、方便的编程工具。asp的网页文件的格式是.asp,现在常用于各种动态网站中。 asp是一种服务器端脚本编写环境,可以用来创建和运行动态网页或web应用程序。asp网页可以包含html标记、普通文本、脚本命令以及com组件等。利用asp可以向网页中添加交互式内容(如在线表单),也可以创建使用html网页作为用户界面的web应用程序。 与html相比,asp网页具有以下特点:
  (1)利用asp可以实现突破静态网页的一些功能限制,实现动态网页技术;
  (2)asp文件是包含在html代码所组成的文件中的,易于修改和测试;
  (3)服务器上的asp解释程序会在服务器端制定asp程序,并将结果以html格式传送到客户端浏览器上,因此使用各种浏览器都可以正常浏览asp所产生的网页;
  (4)asp提供了一些内置对象,使用这些对象可以使服务器端脚本功能更强。例如可以从web浏览器中获取用户通过html表单提交的信息,并在脚本中对这些信息进行处理,然后向web浏览器发送信息;
  (5)asp可以使用服务器端activex组件来执行各种各样的任务,例如存取数据库、发现哦那个email或访问文件系统等。
  (6)由于服务器是将asp程序执行的结果以html格式传回客户端浏览器,因此使用者不会看到asp所编写的原始程序代码,可防止asp程序代码被窃取。
asp的工作原理
  当在web站点中融入asp功能后,将发生以下事情:
  1、用户向浏览器地址栏输入网址,默认页面的扩展名是.asp
  2、浏览器向服务器发出请求。
  3、服务器引擎开始运行asp程序。
  4、asp文件按照从上到下的顺序开始处理,执行脚本命令,执行html页面内容。
  5、页面信息发送到浏览器。
asp的运行环境
  asp需要运行在pws或iis下。pws或iis服务在windows98或windows2000的光盘上附带着,可以通过“添加/删除程序”中的“添加/删除windows组件”来安装。
  一般asp需与access数据库或sql server数据库结合使用,编出功能强大的程序。
  能够运行asp的web服务器软件
  windows2000默认安装的是iis5.0(internet information server),而windows xp默认安装的是iis5.1,windows 2003默认安装的iis6.0。
  pws(personal web server)运行在windows98环境下的简单个人网页服务器。
asp的意涵与特性
  asp( application service provider,应用软体租赁服务提供者 )即是指「透过网路以租赁方式提供应用软体服务的业者」,即是指业者以应用软体为主体,透过网路一对多地传递服务,这种以服务为主的交易模式促使企业可藉由租赁的方式,以更符合成本效益的方式拥有软体的使用权,并且亦能因为业者集中式的管理而大幅降低企业维护的成本.
  基本上,asp即具有「软体服务化,服务网路化」,「资讯委外服务与网路结合」与「产品通路化,通路产品化」等三大特性,其甚至可以被视为是isp(internet service provider)与its(information technology service)的结合.
  asp的英文是application service provider,中文的标准翻译就是“应用服务提 供商”,是指为商业或者个人客户提供管理应用解决方案的公司或者企业。最近 asp被媒体炒做十分火热,不是it行业的人面对一堆技术名词专业术语很难弄清楚asp的内容,本文试图用浅显的语言来为广大的读者揭开asp神秘的面纱,对于it行业的大热门asp领域有一些基本的认识。
  1. asp是什么东西?
  简单地讲,asp就是为客户提供服务的服务商,它和会计事物所、婚姻介绍所没有什么本质方面的区别。不同的是asp主要是通过internet(国际互联网络)作为主要工作和业务工具,采用一对多的方式,向企业、公司提供标准化的应用软件以及相关的技术咨询、管理租赁的服务,asp的概念最早是1998年由美国人提出来的。目前被全球各大it厂商看好并被认为是可以推动网络经济发展的,有稳固基础的第三种网络商业模式。
  和传统的外包服务(outsourcing)相比,asp的主要区别在于:asp是一对多的经营模式,提供的服务有兼容性和可协调性,并且asp的收费方式一般是按月收费。
  业界认为:asp一般有这样一些“成员”:电信运营商、传统it服务厂商、互联网络接入服务商(isp)、独立软件供应商(isv)、系统集成商和单纯的asp公司。
  根据流行的观点,asp有如下五个核心内涵:
  a. asp着重应用为中心,提供对于应用方面的访问和管理。
  b. asp服务可以为用户提供没有在服务器、人员、系统和系统授权等前期资源投入情况下就可以在“定制”的全新应用系统环境进行访问的服务,如isp,而这样的服务一般按月份asp收取服务费。
  c. asp采用集中管理的方式---asp一般都有一个管理中心,所有的客户通过internet来进行远程访问,获得技术支持和咨询服务。
  d. 一对多的服务,也就是讲,asp提供的是标准化的产品包,产品都是最低程度的自定义或者没有实现客户定制化,对于行业用户来讲已经达到实用方便的标准。
  e. 按照合同交付,在asp客户的眼中,asp是一家根据客户协议内容提供相关服务,保证应用服务系统服务可以得到确实履行的机构。
  2. asp为什么会火?
  从大的方面来讲,困扰国内企业生存、发展的核心问题是管理问题。随着互联网络的普及和应用的深入,企业用户可以随时随地直接租用asp的服务器和软件系统来进行自己的业务管理,这样做的好处在于;第一,企业可以节省大笔用于it建设方面的资金,大幅度降低企业管理信息化的成本。第二,asp的用户可以采用各种方式获得应用和服务,软件类服务产品完全可以通过网络在非常短的时间内组成一个完善的、高效的、先进的企业管理系统,迅速获得企业一体化的运营管理方案。
  网络经济发展突飞猛进,电子商务一日千里,网络和网站从门户到内容、从注意力到垂直性,目前逐渐转向热衷asp也是一个主要的原因。
  笔者资料中,国内最早对asp触电的是网友“飞鸟”,在1998年6月自发组织了研究、交流和探讨asp技术的“飞鸟之家”,现在已经发展成为chinaasp.com,成为国内最早的asp应用技术服务提供商网站。上海的互易网络有限公司结合国内实际情况,推出了为国内企业服务的asp平台互易网,向企业提供以电子商务为核心的,企业内、外部网络设施和应用的远程构架和托管服务,创造虚拟企业门户(ep)直接将asp应用到商业增殖环节中去。
  此外,isp也全面转向asp的怀抱,成为isp进一步发展的产物。软件商对于asp更是情有独钟。业界最新的消息是,中国第三电信“网通”已经制定asp发展战略,国内最大的管理咨询公司“汉普”将把旗下八个子公司定位在企业内部资源计划管理(erp)领域的asp中,北京“联成互动”瞄准客户关系管理(crm)领域的asp,北京“数码方舟”定位在网络办公的asp,hp正在和中国建设银行讨论共建金融领域的asp
  asp正在it经济大潮中显山露水,其发展前景不可估量。
  3. asp的发展阶段和面临的问题
  以网络服务商、软件厂商和isp为主力的各种it角色,正在根据自己的优势条件出发对asp领域进行多种方面的尝试。就目前阶段来讲,asp提供的服务不计其数五花八门,没有标准化和量化的概念,硬件厂商向asp的“土壤”和势力方向靠拢,软件厂商和isp则直接参与到asp业务的第一线。
  笔者估计,经过一段时间的试探和发展,asp将向服务集成方面发展,产品和服务初步的标准化将很快建立起来,接着进入到市场细化和标准制定、asp产品成熟时期,asp的稳步增长,最终将成为it行业商务模式的核心!
  目前在asp发展的道路上,主要面临的问题是观念的转变方面:用租赁代替购买,服务集成代替产品经销商、服务经济代替产品经济等等。具体到实际方面来讲,安全和服务的质量是asp和客户共同关心的头等大事,要实现asp提出的“租赁高科技”的口号,asp任重而道远!
asp常用内置函数
  1,日期/时间函数
  这些函数包括对“年”、“月”、“日”、“时”、“分”、“秒”、“星期”等的显示。
  (1)now函数:根据计算机系统设定的日期和时间,返回当前的日期和时间值。使用方法now();
  (2)date函数:只返回当前计算机系统设定的日期值。使用方法:date();
  (3)time函数:只返回当前计算机系统设定的时间值。使用方法:time();
  (4)year函数:返回一个代表某年的整数。使用方法:year(date),其中date参数是任意的可以代表日期的参数,比如“year(date())”就表示是从“date()”得出的日期中提取其中“年”的整数。
  另外,还可以这样应用:“year(#5 20,2006#)”表示提取“2006年5月20日”中“年”的整数值。关于“5 20,2006”,也可使用“5-20-2006”、“5/20/2006”等形式表现,即“某月某日”和“某年”的组合。同时注意使用“#”进行包括以表示日期值。
  (5)month函数:返回1到12之间的整数值,表示一年中某月。使用方法:month(date)。关于参数date的说明和year函数相同。但要注意日期的正确性,比如“#13-31-2006#”,根本就没有“13”月,肯定是错误的了。
  (6)day函数:返回1到31之间的整数值,表示一个月中的某天。使用方法:day(date)。关于参数date的说明和year函数相同。同样要注意日期的正确性,比如“#2-30-2006#”其中对“2”月定义的“30”日这天就是错误的。
  (7)hour函数:返回0到23之间的整数值,表示一天中的某个小时。使用方法:hour(time)。其中参数time是任意的可代表时间的表达式。比如“hour(time())”就表示是从“time()”得出的时间中提取其中“小时”的整数。同样,参数time还可以这样应用“hour(#11:45:50#)”表示从“11”时“45”分“50”秒中提取当前小时数。当然,定义的时间要符合时间的规范。
  (8)minute函数:返回0到59之间的整数值,表示一小时中的某分钟。使用方法:minute(time)。time参数的说明和hour函数相同。
  (9)second函数:返回0到59之间的整数值,表示一分钟中的某秒。使用方法:second(time)。time参数的说明和hour函数相同。
  (10)weekday函数:返回一个星期中某天的整数。使用方法:weekday(date)。关于参数date的说明和year函数相同。该函数返回值为“1”到“7”,分别代表“星期日”、“星期一”……“星期六”。比如当返回值是“4”时就表示“星期三”。
  (11)weekdayname函数:返回一个星期中具体某天的字符串。相对weekday函数而言即翻译出“星期几”,使用方法:weekdayname(weekday)。参数weekday即星期中具体某天的数值。比如“weekdayname(weekday(date()))”就表示当前是“星期几”。因为“date()”表示的是当前的时间,而“weekday(date())”就表示的是一星期中具体某天的整数。
  当然weekdayname函数最终显示的字符串内容还与当前操作系统语系有关,比如中文操作系统将显示“星期一”这类的中文字符,而英文操作系统则显示为“mon”(monday简写)。
  此外,在vbscript中还有一些关于时间间隔的计算函数:
  (1)dateadd函数:返回指定时间间隔的日期、时间。可以计算出相隔多少年、或相隔几个月、又或相隔几个小时等的新日期、时间。使用方法:dateadd(interval, number, date)。
  其中参数interval表示需要添加的时间间隔单位。其是以字符串的形式表达的,比如“yyyy”表示年,“q”表示季度,“m”表示月份,“d”表示天数,“ww”表示周数,“h”表示小时数,“n”表示分钟数,“s”表示秒数。
  而参数number则表示添加的时间间隔数。其是以数值的形式表达的,可以为负值。参数date则要求是日期、时间的正确格式。
  比如dateadd("d",100,"2006-5-20")就表示2006年5月20号以后的100天的日期值:2006-8-28。再比如dateadd("h",-12,"2005-5-20 10:00:00")就表示2005年5月20号上午10点前的12小时的日期时间:2005-5-19 22:00:00。
  (2)datediff函数:返回两个日期时间之间的间隔。可计算出两个日期相隔的年代、小时数等。使用方法:datediff(interval,date1,date2)。
  参数interval和dateadd函数中的interval参数内容描述相同,date1和date2参数分别就是相互比较的两个日期时间。另外,当date1的日期时间值大于date2时,将显示为负值。
  比如datediff("yyyy","1982-7-18",date)表示某人的出生到现在已经多少年了。又比如datediff("d","1982-7-18","2062-7-18")则计算了80年过了多少天:29220。
  2,字符串处理函数
  在脚本的功能处理中,通常需要对一些字符串进行一些修饰性处理。比如过滤掉字符串中的敏感字眼以符合最终显示的要求;又比如一段较长的字符串,需要提取开头的几个字符时。
  (1)asc函数:返回字符串中第一个字母对应的ansi字符代码。使用方法:asc(string)。其中string参数表示字符串。
  (2)chr函数:返回指定了ansi 字符代码对应的字符。使用方法:chr(chrcode)。参数chrcode是相关的标识数字。该函数的功能和asc函数形成对应。
  比如:asc(“a”)表示小写字母“a”的ansi 字符“97”;同样chr(97)表示的就是“小写字母a”。另外chr(chrcode)中参数chrcode值为0到31的数字时,表示不可打印的ascii码。比如“chr(10)”表示换行符,“chr(13)”表示回车符等,这常用于输入和显示格式的转换中。
  (3)len函数:返回字符串内字符的数目(字节数)。使用方法:len(string)。比如len(“love”)的值就是4。
  (4)lcase函数:返回所有字符串的小写形式。使用方法:lcase(string)。比如lcase(“cnbruce”)返回为“cnbruce”。
  (5)ucase函数:返回所有字符串的大写形式。与lcase函数形成对应。同样,ucase(“cnbruce”)返回为“cnbruce”。
  (6)trim函数、ltrim函数和rtrim函数:分别返回前导和后续不带空格、前导不带空格或后续不带空格的字符串内容。比如:
  trim(“ cnbruce ”)返回为“cnbruce”,前导和后续都不带空格;
  ltrim(“ cnbruce ”)返回为“cnbruce ”,前导不带空格;
  rtrim(“ cnbruce ”)返回为“ cnbruce”,后续不带空格;
  该函数常用于注册信息中,比如确保注册用户名前或后的空格。
  (7)left函数:返回从字符串的左边算起的指定数目的字符。使用方法:left(string,length)。比如left(“brousce”,5)返回为“brous”,即前五位字符。
  (8)right函数:返回从字符串的左边算起的指定数目的字符。使用方法:right(string,length)。比如right(“brousce”,4)返回为“usce”,即后四位字符。
  (9)instr函数:返回某字符串在另一字符串中第一次出现的位置。比如现在查找字母“a”在字符串“a110b121c119d1861”中第一次出现的位置,则可以 instr(my_string,"a110b121c119d1861")
  (10)mid函数:从字符串中返回指定数目的字符。比如现在的“110”则应该是从字符串“a110b121c119d1861”的第2位取得3个单位的值:mid("a110b121c119d1861",2,3)
  (11)replace函数:在字符串中查找、替代指定的字符串。replace(strtobesearched,strsearchfor,strreplacewith)其中strtobesearched是字符串,strsearchfor是被查找的子字符串,strreplacewith是用来替代的子字符串。比如 replace(rscon,"<","<") 则表示将rscon中所有“<”的字符替换为“<”
  3,类型转换函数
  cbool(string) 转换为布尔值
  cbyte(string) 转换为字节类型的值
  ccur(string) 转换为货币类值
  cdate(string) 转换为日前类型的值
  cdbl(string) 转换为双精度值
  cint(string) 转换为整数值
  clng(string) 转换为长整型的值
  csng(string) 转换为单精度的值
  cstr(var) 转换为字符串值
  str(var) 数值转换为字符串
  val(string) 字符串转换为数值
  4,运算函数
  abs(nmb) 返回数子的绝对值
  atn(nmb) 返回一个数的反正切
  cos(nmb) 返回一个角度的余炫值
  exp(nmb) 返回自然指数的次方值
  int(nmb) 返回数字的整形(进位)部份
  fix(nmb) 返回数字的整形(舍去)部份
  formatpercent(表达式) 返回百分比
  hex(nmb) 返回数据的16进制数
  log(nmb) 返回自然对数
  oct(nmb) 返回数字的8进制数
  rnd 返回大于“0”而小于“1”的随机数,但此前需 randomize 声明产生随机种子
  sgn(nmb) 判断一个数字的正负号
  sin(nmb) 返回角度的正铉值
  sqr(nmb) 返回数字的二次方根
  tan(nmb) 返回一个数的正切值
  5,其他函数
  isarray(var) 判断一个变量是否是数组
  isdate(var) 判断一个变量是否是日期
  isnull(var) 判断一个变量是否为空
  isnumeric(var) 判断表达式是否包含数值
  isobject(var) 判断一个变量是否是对象
  typename(var) 返回变量的数据类型
  array(list) 返回数组
  split(liststr) 从一个列表字符串中返回一个一维数组
  lbound(arrayp 返回数组的最小索引
  ubound(array) 返回数组的最大索引
  createobject(class) 创建一个对象
  getobject(pathfilename) 得到文件对象
asp中application和session对象
  一、application对象的成员概述
  application对象成员包括application对象的集合、方法和事件。
  ⒈application对象的集合
  contents集合:没有使用元素定义的存储于applicaiton对象中的所有变量的集合
  staticobjects:使用元素定义的存储于application对象中的所有变量 的集合
  例:在default.asp中有如下赋值
  application("a")="a"
  application("b")=128
  application("c")=false
  则有contents集合
  application.contents(1)="a" '也可写为application.contents("a")="a"
  application.contents(2)=128 '也可写为application.contents("b")=128
  application.contents(3)=false '也可写为application.contents("c")=false
  在此笔者推荐你在调用时使用类如application.contents("a")的方法,因为这样更为直观,如果用序号来表示的话则要考虑赋值的先后顺序。
  ⒉application对象的方法
  contents.remove("变量名"):从application.contents集合中删除指定的变量
  contents.removeall() :把application.contents集合中的所有变量删除
  lock() :锁定application对象,使得只有当前的asp页对内容能进行访问
  unlock() :解除对application对象的锁定
  例:在default.asp中:
  application("a")="a"
  application("b")=128
  application("c")=false
  response.write application.contents(1)&"
  "
  response.write application.contents(2)&"
  "
  response.write application.contents(3)&"
  "
  response.write "after remove b:"
  application.contents.remove("b")
  response.write application.contents(1)&"
  "
  response.write application.contents(2)&"
  "
  执行结果:
  a
  128
  false
  after remove b:
  a
  false
  如果要删除集合中所有变量用application.contents.removeall即可,至于lock和unlock方法在实际中经常用到,读者也比较熟悉,在此就不在累赘。
  ⒊application对象事件
  onstart:第一个访问服务器的用户第一次访问某一页面时发生
  onend :当最后一个用户的会话已经结束并且该会话的onend事件所有代码已经执行完毕后发生,或最后一个用户访问服务器一段时间(一般为20分钟)后仍然没有人访问该服务器产生。
  想要定义application对象的onstart和onend事件里做什么需要将代码写在global.asa这个文件里(下文有举例),并且将该文件放在站点的根目录下(一般是inetpubwwwroot)
  二、session对象的成员概述
  session对象的成员比application对象多一项属性,即:集合、属性、方法、事件
  ⒈session对象的集合
  contents :没有使用元素定义的存储于特定session对象的所有变量的集合。
  staticobject:使用元素定义的、存储于session对象中的所有变量的集合。
  例:在default.asp中有如下赋值
  session("a")="a"
  session("b")=128
  session("c")=false
  则有contents集合
  session.contents(1)="a" '也可写为session.contents("a")="a"
  session.contents(2)=128 '也可写为session.contents("b")=128
  session.contents(3)=false '也可写为session.contents("c")=false
  ⒉session对象的属性
  codepage: 可读/可写。整型。定义用于在浏览器中显示页内容的代码页。代码页是字符集的数字值,不同的语言使用不同的代码页。例如,ansi代码页为1252,日文代码页为932,简体中文代码页为936。
  lcid : 可读/可写。整型。定义发送给浏览器的页面地区标识。lcid是唯一地标识地区的一个国际标准缩写,例如,2057定义当前地区的货币符号是"£"。
  sessionid: 只读。长整型。返回本会话的会话标识符。每创建一个会话,由服务器自动分配一个标识符。可以根据它的值判断两个用户是谁先访问服务器。
  timeout : 可读/可写。整型。为会话定义以分钟为单位的超时限定。如果用户在这个时间内没有刷新或请求任何一个网页,则该用户产生的会话自动结束。缺省值是20。
  以上属性在实际应用中作用不大,而且基本上不需要怎么修改,这几个属性也没什么特殊的地方。
  ⒊session对象的方法
  contents.remove("变量名"): 从session.contents集合中删除指定的变量
  contents.removeall() : 删除session.contents集合中的所有变量
  abandon() : 结束当前用户会话并且撤消当前session对象。
  session对象的contents.remove("变量名")和contents.removeall()方法与application对象的基本上没什么区别,为帮助理解,大家可以参照上面的例子将application改为session。这里要说明一下的是contents.removeall()和abandon()的区别,执行这两个方法都会释放当前
  用户会话的所有session变量,不同的是contents.removeall()单纯地释放session变量的值而不终止当前的会话,而abandon()除了释放session变量外还会终止会话引发session_onend事件,希望大家注意两者的区别。
  ⒋session对象的事件
  onstart: 当asp用户会话产生时触发,一旦有任一用户对本服务器请求任一页面即产生该事件。
  onend : 当asp用户会话结束时触发,当使用abandon()方法或超时也会触发该事件。
  这两个事件和application的onstart、onend事件一样,也是必须放在global.asa文件里,下
  面就重点和大家研究一下这四个事件的使用。
  三、global.asa
  asp的application和session对象体现了其他asp内置对象所没有的特征--事件。每一个访客访问服务器时都会触发一个onstart事件(第一个访客会同时触发application和session的onstart事件,但application先于session),每个访客的会话结束时都会触发一个onend事件(最后一个访客会话结束时会同时触发application和session的onend事件,但session先于application)。
  onstart和onend这两个事件一般应用在虚拟社区中统计在线人数、修改用户的在线离线状态等。要具体定义这两个事件,需要将代码写在global.asa文件,并将该文件放在站点的根目录下(缺省是inetpubwwwroot)。另外,application和session对象规定了在onend事件里除了application对象外其他asp内置对象(response、request、server、session...)一概不能使用。以下举一个虚拟社区统计在线人数的例子来说明如何使用这两个事件。
  文件说明:
  global.asa 位于d:inetpubwwwroot目录下
  default.asp 位于d:inetpubwwwroot目录下,虚拟社区登录页面
  login.asp 位于d:inetpubwwwroot目录下,用于检测用户输入的用户名及密码
  index.asp 位于d:inetpubwwwroot目录下,虚拟社区首页
  bbs.mdb 位于d:inetpubwwwroot目录下,存储用户信息的数据库
  数据库(access)结构:
   ===bbs表===
  id 用户id,长整型
  name 用户名,文本型
  code 密码,文本型
  online 在线状态,是/否
   ===global.asa===
  <script language="vbscript" runat="server">
  sub application_onstart
   application("online")=0
  end sub
  sub application_onend
  nd sub
  sub session_onstart
  end sub
  sub session_onend
   if session.contents("pass") then '判断是否为登录用户的session_onend
  application.lock
  application("online")=application("online")-1
  application.unlock
   end if
  end sub
  </script>
  ===login.asp===
   ......'密码验证,连接数据库,检测用户输入的用户名及密码是否正确
  if 密码验证通过 then
   session("name")=rs("name")
   session("id")=rs("id")
   session("pass")=true
  else
   rs.close
   conn.close
   response.write "密码错误!"
   response.end
  end if
  application.lock
  application("online")=application("online")+1
  conn.execute ("update bbs set online=1 where id="&session("id"))'将用户的状态设为在线
  application.unlock
  rs.close
  conn.close
  response.redirect "index.asp" '初始化数据后跳转到社区首页
  ===========
  在本例中,用application("online")变量记录已经登录社区的在线人数,因为一旦有用户访问服务器而不管用户是否登录,都会产生onstart事件,所以不能在onstart事件里使applicaiton("online")加一。因为不管是否是登录用户的会话结束都会产生onend事件(假如有访客访问了服务器但并不登录社区,他的会话结束后也会产生onend事件),所以在session_onend事件里用了句if语句来判断是否为已登录用户的onend事件,如果是才将在线人数减一。
  这只是一个统计在线人数的简单例子,对于一个完整的虚拟社区来说,仅仅统计有多少人在线是不够的,在本例中数据库里有个online字段是用来记录用户的在线状态,用户登录的时候,在login.asp里将online设为1,但用户离线时并没有将online设为0,要完善它,就要修改一下session_onend事件,在该事件里将online设为0。
  ===global.sas===
  <script language="vbscript" runat="server">
  sub application_onstart
   application("online")=0
   set application("conn")=server.createobject("adodb.connection")
   application("db")=server.mappath("bs.mdb") '此处最好使用绝对路径bs.mdb,下文有详细介绍
  end sub
  sub application_onend
   set application("conn")=nothing
  end sub
   sub session_onstart
  end sub
  sub session_onend
   if session.contents("pass") then '判断是否为登录用户的session_onend
   application("con").open ="driver={microsoft access driver (*.mdb)};dbq="&application("db")
    application.lock
    application("online")=application("online")-1
    application("con").execute ("update friends set online=0 where id="&session.contents("id"))
    application.unlock
    application("con").close
   end if
  end sub
  </script>
  ==============
  至此,完整的代码已经完成了。因为在application和session的onend事件里不能使用server对象,所以要将数据库的连接及数据库在服务器上的物理地址(d:inetpubwwwrootbs.mdb)存储在application变量中,并在application_onstart事件中预先处理。同理,在session_onend事件中不能用session("pass")来代替session.contents("pass")(以下有详尽说明)。
  四、本文实例中值得引起注意的两点
  ⒈onend事件里的session.contents
  刚开始接触global.asa的朋友经常会将上面session_onend事件里的
  if session.contents("pass") then 写成
  if session("pass") then,
  这样的话系统不会提示错误,但是永远也不会执行then后面的内容,这是因为在onend事件里禁止使用session对象,但是可以用session对象的集合来调用session变量。因为iis并没提示任何错误信息,所以笔者曾经在这上面浪费了很多时间。在此希望大家引以为鉴!
  ⒉application_onstart事件里用server.mappath获取数据库的物理地址时应使用绝对地址为了说明这个问题,大家可以做个实验:将上面application_onstart事件里的
  application("db")=server.mappath("bs.mdb")改为:
  application("db")=server.mappath("bbs.mdb")
  然后在d:inetpubwwwroot目录下建立一个test子目录,写一个temp.asp在test目录里。
  ====test.asp====
  <%response.write application("db")%>
  ================
  再将temp.asp拷贝一份放在根目录下(d:inetpubwwwroot)。用记事本打开global.asa,再打开两个浏览器,浏览器a输入地址http://localhost/temp.asp,按回车,将在浏览器上输出:
  d:inetpubwwwrootbs.mdb
  然后,在记事本的窗口上点"文件"菜单,选"保存"(使global.asa的修改时间改变,从而使iis重启动所有服务),再在浏览器b输入地址http://localhost/test/temp.asp,按回车,在浏览器上输出的是:
  d:inetpubwwwroot estbs.mdb
  global.asa文件虽然是放在站点根目录下,但是如果在server.mappath中使用的是相对地址,而触发application_onstart事件的用户第一次访问的页面又不是属于根目录的话,得到数据库的物理地址将不会是期望的结果,希望大家要特别小心。
  类别:web | 编辑 | 删除
  | 评论(0) | 浏览(0)
  全面解析asp server对象
  2007-07-27 12:40
  server对象提供对服务器上访问的方法和属性.大多数方法和属性是作为实用程序的功能提供的。
  语法:
   server.property|method
  属性(property)
   server对象只有一个属性:scripttimeout 程序能够运行的最大时间
  方法(methods)
   createobject 建立一个对象实例.
   execute 执行一个asp文件
   getlasterror 返回一个错误代码
   htmlencode 对指定的html代码进行转换.
   mappath 将一个相对路径转化为一个绝对路径.
   transfer 将当前的所有状态信息发送给另一个asp文件
   urlencode 以url形式转化指定的代码,包括空格
  server对象的方法详细说明
   createobject
   语法
   server.createobject( progid )
   参数
  progid
  指定要创建的组件名称,格式如下: [vendor.]component[.version].
   要点:
  一般来说,用由server.createobject方法创建的对象拥有页面的范围.这就说,当这页的asp程序执行完后,这种对象会自动地消失.
  为了创建一个拥有session或application范围的对象,你可以在global.asa文件中使用
  execute
  execute 方法呼叫一个asp文件并且执行它就像这个呼叫的asp文件存在这个asp文件中一样。这很像许多语言中的类的调用。
  语法
  server.execute( path )
  参数
   path
  指定执行的那个asp文件的路径。如是它是一个绝对路径,那么它必须是一个在这个asp应用程序相同的地方(目录)。
  讲解
  server.execute 方法提供了一种将一个复杂asp应用程序分化为小块单位来执行的方法。通过这种方法,你能够建一个asp图书馆,你能够随便在你需要时调用你图书馆中的asp文件。这个就有点像ssi了!嘿嘿!
  当iis根据指定的asp文件路径执行完这个asp文件之后,就会自动返回以前的asp文件。这个刚刚执行完的asp文件有可能改变了http head.但是和其它的asp文件一样,当程序试图改变http head时,就会报错!
  这个path参数可以包括一个询问信息。
  如果在被呼叫和呼叫的asp文件中都含有相同的子函数,那么这些子函数只在本asp文件中起作用。举个例子,如果在下面的asp1和asp2两个文件中都含有放弃程序的子函数。首先asp1呼叫asp2,那么asp2中的的ontransactionabort开始执行,当asp2执行完毕,asp1中的ontransactionabort才开始执行。
  
   asp1:
  < %@ transaction=
  required
  %>
  < %
   server.execute (".asp")
   sub ontransactionabort
   sub ontransactioncommit
  %>
  asp2.asp:
  < %@
   transaction=required
   sub ontransactionabort
   sub ontransactioncommit
  %>
  example
  asp1
  < % response.write("i am going to execute asp2 ")
  server.execute("/myasps/asp2.asp")
  %>
  asp2
  < % response.write("here i am")%>
  getlasterror
  getlasterror 方法返回一个asperror object 来描述一个错误信息.这个方法只适用于在asp文件发送任何内容给用户机之前.
  语法
  server.getlasterror ()
  要点
  如果一个500;100 用户错误已经被定义在一个asp应用程序中,它是指的一个以.asp为后缀的文件。这种情况下,在这个程序运行时当一个错误发生时,服务器就会自动的以server.transfer这种方式传送到这个正在执行的asp页面。asp应用程序就会将有效的处理这个错误。另外,这个asperror object一定要有效,这样你就能够看到服务器提供给你的错误信息来改这个文件了!
  一般的web site 都是根据文件iishelpcommon500-100.asp来构造的。你能够用它来执行一个asp错误,当然你能够自己定义了!。如果你想改变为另外一个asp文件的来执行这些用户错误。那么你可以用iis中的snap-in.
  注意:当iis发现了一个asp文件或者global.asa文件中的一个错误,那么一个500;100用户错误产生。以下的程序将不能执行!
  example
  下面的三个例子证明不同的错误会产生的用户错误。三个错误是:
  编译错误
  运行错误
  逻辑错误
  第一个例子证明了一个编译错误,就是当iis试图包含一个文件时产生的。这个错误会产生是因为在这个包含文件中没有定义所需的参数。第二个例子显示的是一个运行错误,这个程序中断的原因是程序中没有“next".第三个例子显示的是一个逻辑错误,因为这个程序试图除以一个0. 不行啦!
  example 1
  < %
  response.write "hello"
  %>
  example 2
  < %
  dim i
  for i=1 to 1
  nxt
  %>
  example 3
  < %
  dim i,j
  dim sum
  sum=0
  j=0
  for i=1 to 10
   sum=sum+1
  next
  sum=sum/j
  %>
  htmlencode
  htmlencode方法对指定的字符串进行html编码.
  语法
   serverlencode( string )
  参数
   string 要进行编码的字符
  例子
   下面的程序:
  < %= serverlencode("the paragraph tag: ") %>
  输出为:
  the paragraph tag:
  注意 程序执行后在浏览器中看到的是:
  the paragraph tag:
  但是如果你用"查看源文件"看一下的话,源代码就不是了.
  mappath
  mappath 方法将相对路径转化为服务器上的物理路径
  语法
  server.mappath( path )
  参数
  path
  相对路径。这个路径是以"/"或""开头的路径,如果这个路径中没有"",那么mappath方法就会返回以当前目录为基础的路径。
  讲解
  mappath 方法不能检查路径在这个服务器下是否存在。因为 mappath 转化路径时是不管这个路径是否在这个服务器下存在的。
  你能够用它来将一个相对路径转化为一个物理路径,然后再在这个路径下进行各种操作。
  example
  在下面的例子中,data.txt文件存在 c:inetpubwwwrootscript 目录中,而且一个test.asp 文件包括下面的代码。c:inetpubwwwroot 是该服务器的主目录 。
  下面的例子中,首先用环境变量"path_info"获得当前文件的物理路径。
  下面是script 代码:
  < %= server.mappath(request.servervariables("path_info"))%>
  显示为:
  c:inetpubwwwrootscript est.asp
  因为下面的例子中路径参数没有以"/"开头,所以它是以当前目录转化的,asp文件是放在c:inetpubwwwrootscript中的.以下是 scripts的内容:
  < %= server.mappath("data.txt")%>
  < %= server.mappath("script/data.txt")%>
  显示为:
  c:inetpubwwwrootscriptdata.txt
  c:inetpubwwwrootscriptscriptdata.txt
  以下的两个例子是以"/"开头的.以下是scripts的内容:
  < %= server.mappath("script")%>
  显示为:
  c:inetpubwwwrootscriptdata.txt
  c:inetpubwwwrootscript
  直接用"/"或""就会得到服务器的主目录:
  < %= server.mappath("")%>
  显示为:
  
  c:inetpubwwwroot
  c:inetpubwwwroot
  transfer
  transfer 方法会把一个正在执行的asp文件的所有信息传给另外一人asp文件。
  语法
  server.transfer (path)
  参数
  path
  将要接收信息的asp文件的位置。
  要点
  当你调用server.transfer时,所有内建对象的状态信息都会包含在这次传送之中。这就是说,所有在保存在session或application中的信息都会被传送,而且,所有当前请求的信息都会被接收信息的asp文件所接受。
  example
  下面的例子示范了从一个asp文件传送到另一个asp文件例子!
  asp1
  < % dim sessvar1 response.write session.sessionid
   response.write ("")
   response.write("i am going to asp2 ")
   server.
  transfer
  ("/myasps/asp2.asp")
  % >
  
   asp2
  < % response.write session.sessionid %>
  urlencode
  urlencode 方法可以将指定字符串进行url编码。
  语法
  server.urlencode( string )
  参数
  string 指定要转化的字符串
  example
  下面是代码:
  < % respones.write(server.urlencode("http://www.microsoft.com")) % >
  显示为:
  http%3a%2f%2fwww%2emicrosoft%2ecom
  属性:scripttimeout
  scripttimeout 属性规定了程序的最大运行时间。
  语法
  server.scripttimeout = numseconds
  参数
  numseconds
  规定了程序的最大的运行时间(以秒计算)。缺省值是90秒
  remarks
  一个缺省的scritpt timeout的值会能过aspscripttimeout属性来设置在web sertvic 或 web server上。在程序中,scripttimeout属性的值不能小于这个缺省值。举个例子吧,如果numseconds我们设置为10秒,而缺省值为90秒,那么程序就会中止在90秒以后,而不是10秒以后的。同样,如果我们设置scripttimeout的值为100秒,那么,程序就会在100秒之后中止,而不是90秒。
  example
  下面的例了中程序将被设置为100秒后自动中止。
  < % server.scripttimeout = 100 %>
  下面的例子中将重新得到scripttimeout的值,然后把它存在timout变量中
  < % timeout = server.scripttimeout %>
  asp内置对象request的servervariables集合列表
  request.servervariables("url")
  返回服务器地址
  request.servervariables("path_info")
  客户端提供的路径信息
  request.servervariables("appl_physical_path")
  与应用程序元数据库路径相应的物理路径
  request.servervariables("path_translated")
  通过由虚拟至物理的映射后得到的路径
  request.servervariables("script_name")
  执行脚本的名称
  request.servervariables("query_string")
  查询字符串内容
  request.servervariables("http_referer")
  请求的字符串内容
  request.servervariables("server_port")
  接受请求的服务器端口号
  request.servervariables("remote_addr")
  发出请求的远程主机的ip地址
  request.servervariables("remote_host")
  发出请求的远程主机名称
  request.servervariables("local_addr")
  返回接受请求的服务器地址
  request.servervariables("http_host")
  返回服务器地址
  request.servervariables("server_name")
  服务器的主机名、dns地址或ip地址
  request.servervariables("request_method")
  提出请求的方法比如get、head、post等等
  request.servervariables("server_port_secure")
  如果接受请求的服务器端口为安全端口时,则为1,否则为0
  request.servervariables("server_protocol")
  服务器使用的协议的名称和版本
  request.servervariables("server_software")
  应答请求并运行网关的服务器软件的名称和版本
  request.servervariables("all_http")
  客户端发送的所有http标头,前缀http_
  request.servervariables("all_raw")
  客户端发送的所有http标头,其结果和客户端发送时一样,没有前缀http_
  request.servervariables("appl_md_path")
  应用程序的元数据库路径
  request.servervariables("content_length")
  客户端发出内容的长度
  request.servervariables("https")
  如果请求穿过安全通道(ssl),则返回on如果请求来自非安全通道,则返回off
  request.servervariables("instance_id")
  iis实例的id号
  request.servervariables("instance_meta_path")
  响应请求的iis实例的元数据库路径
  request.servervariables("http_accept_encoding")
  返回内容如:gzip,deflate
  request.servervariables("http_accept_language")
  返回内容如:en-us
  request.servervariables("http_connection")
  返回内容:keep-alive
  request.servervariables("http_cookie")
  request.servervariables("http_user_agent")
  返回内容:mozilla/4.0(compatible;msie6.0;windowsnt5.1;sv1)
  request.servervariables("https_keysize")
  安全套接字层连接关键字的位数,如128
  request.servervariables("https_secretkeysize")
  服务器验证私人关键字的位数如1024
  request.servervariables("https_server_issuer")
  服务器证书的发行者字段
  request.servervariables("https_server_subject")
  服务器证书的主题字段
  request.servervariables("auth_password")
  当使用基本验证模式时,客户在密码对话框中输入的密码
  request.servervariables("auth_type")
  是用户访问受保护的脚本时,服务器用於检验用户的验证方法
  request.servervariables("auth_user")
  代证的用户名
  request.servervariables("cert_cookie")
  唯一的客户证书id号
  request.servervariables("cert_flag")
  客户证书标志,如有客户端证书,则bit0为0如果客户端证书验证无效,bit1被设置为1
  request.servervariables("cert_issuer")
  用户证书中的发行者字段
  request.servervariables("cert_keysize")
  安全套接字层连接关键字的位数,如128
  request.servervariables("cert_secretkeysize")
概述
  asp:英文名:Active Server Page
  asp是Active Server Page的缩写,意为“动态服务器页面”。asp是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单、方便的编程工具。asp的网页文件的格式是.asp,现在常用于各种动态网站中。 asp是一种服务器端脚本编写环境,可以用来创建和运行动态网页或Web应用程序。asp网页可以包含HTML标记、普通文本、脚本命令以及COM组件等。利用asp可以向网页中添加交互式内容(如在线表单),也可以创建使用HTML网页作为用户界面的web应用程序。 与HTML相比,asp网页具有以下特点:
  (1)利用asp可以实现突破静态网页的一些功能限制,实现动态网页技术;
  (2)asp文件是包含在HTML代码所组成的文件中的,易于修改和测试;
  (3)服务器上的asp解释程序会在服务器端执行asp程序,并将结果以HTML格式传送到客户端浏览器上,因此使用各种浏览器都可以正常浏览asp所产生的网页;
  (4)asp提供了一些内置对象,使用这些对象可以使服务器端脚本功能更强。例如可以从web浏览器中获取用户通过HTML表单提交的信息,并在脚本中对这些信息进行处理,然后向web浏览器发送信息;
  (5)asp可以使用服务器端ActiveX组件来执行各种各样的任务,例如存取数据库、发现和那个Email或访问文件系统等。
  (6)由于服务器是将asp程序执行的结果以HTML格式传回客户端浏览器,因此使用者不会看到asp所编写的原始程序代码,可防止asp程序代码被窃取。
  (7) 方便连接ACCESS与SQL数据库.
  (8)开发需要有丰富的经验,否则会留出漏洞,让黑客利用进行注入攻击.
ASP的升级平台:ASP.NET
  asp.net是把基于通用语言的程序在服务器上运行。不像以前的asp即时解释程序,而是将程序在服务器端首次运行时进行编译,执行效果,比一条一条的解释强很多,执行效率大大的提高。
  asp.net可以运行在Web应用软件开发者的几乎全部的平台上。通用语言的基本库,消息机制,数据接口的处理都能无缝的整合到asp.net的Web应用中。asp.net同时也是language-independent语言独立化的,所以,你可以选择一种最适合你的语言来编写你的程序,或者把你的程序用很多种语言来写,现在已经支持的有C#,VB.NET,JScript.NET,managedC++,J#。将来,这样的多种程序语言协同工作的能力保护您现在的基于COM+开发的程序,能够完整的移植向asp.net。
  asp.NET常用的主要有两种开发语言,VB.NET和C#,C#相对更为常用,因为是.NET独有的语言,VB.NET则为以前VB程序设计,适合于以前VB程序员,如果新接触.NET,没有其他开发语言经验,建议直接学习C#。
ASP的意涵与特性
  asp(ApplicationServiceProvider,应用软体租赁服务提供者)即是指「透过网络以租赁方式提供应用软体服务的业者」,即是指业者以应用软体为主体,透过网路一对多地传递服务,这种以服务为主的交易模式促使企业可藉由租赁的方式,以更符合成本效益的方式拥有软体的使用权,并且亦能因为业者集中式的管理而大幅降低企业维护的成本.
  基本上,asp即具有「软体服务化,服务网路化」,「资讯委外服务与网路结合」与「产品通路化,通路产品化」等三大特性,其甚至可以被视为是ISP(InternetService Provider)与ITS(Information Technology Service)的结合.
  根据流行的观点,asp有如下五个核心内涵:
  a. asp着重应用为中心,提供对于应用方面的访问和管理。
  b. asp服务可以为用户提供没有在服务器、人员、系统和系统授权等前期资源投入情况下就可以在“定制”的全新应用系统环境进行访问的服务,如ISP,而这样的服务一般按月份asp收取服务费。
  c. asp采用集中管理的方式---asp一般都有一个管理中心,所有的客户通过INTERNET来进行远程访问,获得技术支持和咨询服务。
  d. 一对多的服务,也就是讲,asp提供的是标准化的产品包,产品都是最低程度的自定义或者没有实现客户定制化,对于行业用户来讲已经达到实用方便的标准。
  e. 按照合同交付,在asp客户的眼中,asp是一家根据客户协议内容提供相关服务,保证应用服务系统服务可以得到确实履行的机构。
  2. asp为什么会火?
  从大的方面来讲,困扰国内企业生存、发展的核心问题是管理问题。随着互联网络的普及和应用的深入,企业用户可以随时随地直接租用asp的服务器和软件系统来进行自己的业务管理,这样做的好处在于;第一,企业可以节省大笔用于IT建设方面的资金,大幅度降低企业管理信息化的成本。第二,asp的用户可以采用各种方式获得应用和服务,软件类服务产品完全可以通过网络在非常短的时间内组成一个完善的、高效的、先进的企业管理系统,迅速获得企业一体化的运营管理方案。
  网络经济发展突飞猛进,电子商务一日千里,网络和网站从门户到内容、从注意力到垂直性,目前逐渐转向热衷asp也是一个主要的原因。
  笔者资料中,国内最早对asp触电的是网友“飞鸟”,在1998年6月自发组织了研究、交流和探讨asp技术的“飞鸟之家”,现在已经发展成为chinaasp.com,成为国内最早的asp应用技术服务提供商网站。上海的互易网络有限公司结合国内实际情况,推出了为国内企业服务的asp平台互易网,向企业提供以电子商务为核心的,企业内、外部网络设施和应用的远程构架和托管服务,创造虚拟企业门户(EP)直接将asp应用到商业增殖环节中去。
  此外,ISP也全面转向asp的怀抱,成为ISP进一步发展的产物。软件商对于asp更是情有独钟。业界最新的消息是,中国第三电信“网通”已经制定asp发展战略,国内最大的管理咨询公司“汉普”将把旗下八个子公司定位在企业内部资源计划管理(ERP)领域的asp中,北京“联成互动”瞄准客户关系管理(CRM)领域的asp,北京“数码方舟”定位在网络办公的asp,HP正在和中国建设银行讨论共建金融领域的asp
  asp正在IT经济大潮中显山露水,其发展前景不可估量。
  3. asp的发展阶段和面临的问题
  以网络服务商、软件厂商和ISP为主力的各种IT角色,正在根据自己的优势条件出发对asp领域进行多种方面的尝试。就目前阶段来讲,asp提供的服务不计其数五花八门,没有标准化和量化的概念,硬件厂商向asp的“土壤”和势力方向靠拢,软件厂商和ISP则直接参与到asp业务的第一线。
  笔者估计,经过一段时间的试探和发展,asp将向服务集成方面发展,产品和服务初步的标准化将很快建立起来,接着进入到市场细化和标准制定、asp产品成熟时期,asp的稳步增长,最终将成为IT行业商务模式的核心!
  目前在asp发展的道路上,主要面临的问题是观念的转变方面:用租赁代替购买,服务集成代替产品经销商、服务经济代替产品经济等等。具体到实际方面来讲,安全和服务的质量是asp和客户共同关心的头等大事,要实现asp提出的“租赁高科技”的口号,asp任重而道远!
ASP的其他解释
  aspirin,阿斯匹林
  aspartic acid,天门冬氨酸
  asp全称(AlisoftSalerPartner)即为“阿里软件销售合作伙伴”,是阿里软件(上海)有限公司管理软件事业部为推动“钱掌柜”产品市场销售,更好的为客户,尤其是中小企业老板提供产品服务,而设立的一种伙伴合作模式。其主要职责是在授权区域内从事阿里软件“钱掌柜”系列产品的客户推动与产品咨询工作。保证我们的产品让更多的企业中小企业老板使用,并为最终用户提供软件应用技术服务与指导。
  asp,是美国武装系统暨程序公司(Armament System and Procedures, Lnc.,)的英文缩写简称。
附录1:asp---IIS的安装与配置
  IIS的安装与配置
  a.安装IIS
  若操作系统中还未安装IIS服务器,可打开“控制面板”,然后单击启动 “添加/删除程序”,在弹出的对话框中选择“添加/删除Windows组件”,在Windows组件向导对话框中选中“Internet信息服务(IIS)”,然后单击“下一步”,按向导指示,完成对IIS的安装
  b.启动Internet信息服务(IIS)
  Internet信息服务简称为IIS,单击Windows开始菜单---所有程序---管理工具---Internet信息服务(IIS)管理器,即可启动“Internet信息服务”管理工具.
  c.配置IIS
  IIS安装后,系统自动创建了一个默认的Web站点,该站点的主目录默认为C:Inetpubwww.root。
  用鼠标右键单击“默认Web站点”,在弹出的快捷菜单中选择“属性”,此时就可以打开站点属性设置对话框,在该对话框中,可完成对站点的全部配置。
  主目录与启用父路径
  单击“主目录”标签,切换到主目录设置页面,该页面可实现对主目录的更改或设置。注意检查启用父路径选项是否勾选,如未勾选将对以后的程序运行有部分影响。主目录—配置---选项。
  设置主页文档
  单击“文档”标签,可切换到对主页文档的设置页面,主页文档是在浏览器中键入网站域名,而未制定所要访问的网页文件时,系统默认访问的页面文件。常见的主页文件名有index.htm、index.html、index.asp、index.php、index.jsp、default.htm、default.html、default.asp
  IIS默认的主页文档只有default.htm和default.asp,根据需要,利用“添加”和“删除”按钮,可为站点设置所能解析的主页文档。
  启动与停止IIS服务
  在Internet信息服务的工具栏中提供有启动与停止服务的功能。单击 可启动IIS服务器;单击 则停止IIS服务器。
附录2:asp、JSP、PHP 三种技术比较
  在asp.NET流行之前,最常用的三种动态网页语言有asp(Active Server Pages),JSP(JavaServer Pages),PHP (Hypertext Preprocessor)。
  简 介
  asp全名Active Server Pages,是一个WEB服务器端的开发环境,利用它可以产生和执行动态的、互动的、高性能的WEB服务应用程序。asp采用脚本语言VBScript(Java script)作为自己的开发语言。
  PHP是一种跨平台的服务器端的嵌入式脚本语言。它大量地借用C,Java和Perl语言的语法,并耦合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面。它支持目前绝大多数数据库。还有一点,PHP是完全免费的,不用花钱,你可以从PHP官方站点。自由下载。而且你可以不受限制地获得源码,甚至可以从中加进你自己需要的特色。
  JSP是Sun公司推出的新一代网站开发语言,Sun公司借助自己在Java上的不凡造诣,将Java从Java应用程序和JavaApplet之外,又有新的硕果,就是JSP,Java ServerPage。JSP可以在Serverlet和JavaBean的支持下,完成功能强大的站点程序。
  三者都提供在HTML代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。但JSP代码被编译成Servlet并由Java虚拟机解释执行,这种编译操作仅在对JSP页面的第一次请求时发生。在asp、PHP、JSP环境下,HTML代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑。普通的HTML页面只依赖于Web服务器,而asp、PHP、JSP页面需要附加的语言引擎分析和执行程序代码。程序代码的执行结果被重新嵌入到HTML代码中,然后一起发送给浏览器。asp、PHP、JSP三者都是面向Web服务器的技术,客户端浏览器不需要任何附加的软件支持。
附录3:asp常用内置函数
  asp常用内置函数在asp中,把带有返回值的这样的一段代码叫做函数。例如通过编写一段代码计算出一个自然数是否是质数,返回给调用程序,由于调用程序需要知道那个自然数是否是质数,所以必须要返回一个值。
  1,日期/时间函数
  这些函数包括对“年”、“月”、“日”、“时”、“分”、“秒”、“星期”等的显示。
  (1)Now函数:根据计算机系统设定的日期和时间,返回当前的日期和时间值。使用方法now();
  (2)Date函数:只返回当前计算机系统设定的日期值。使用方法:date();
  (3)Time函数:只返回当前计算机系统设定的时间值。使用方法:time();
  (4)Year函数:返回一个代表某年的整数。使用方法:year(date),其中date参数是任意的可以代表日期的参数,比如“year(date())”就表示是从“date()”得出的日期中提取其中“年”的整数。
  另外,还可以这样应用:“year(#520,2006#)”表示提取“2006年5月20日”中“年”的整数值。关于“520,2006”,也可使用“5-20-2006”、“5/20/2006”等形式表现,即“某月某日”和“某年”的组合。同时注意使用“#”进行包括以表示日期值。
  (5)Month函数:返回1到12之间的整数值,表示一年中某月。使用方法:month(date)。关于参数date的说明和year函数相同。但要注意日期的正确性,比如“#13-31-2006#”,根本就没有“13”月,肯定是错误的了。
  (6)Day函数:返回1到31之间的整数值,表示一个月中的某天。使用方法:day(date)。关于参数date的说明和year函数相同。同样要注意日期的正确性,比如“#2-30-2006#”其中对“2”月定义的“30”日这天就是错误的。
  (7)Hour函数:返回0到23之间的整数值,表示一天中的某个小时。使用方法:hour(time)。其中参数time是任意的可代表时间的表达式。比如“hour(time())”就表示是从“time()”得出的时间中提取其中“小时”的整数。同样,参数time还可以这样应用“hour(#11:45:50#)”表示从“11”时“45”分“50”秒中提取当前小时数。当然,定义的时间要符合时间的规范。
  (8)Minute函数:返回0到59之间的整数值,表示一小时中的某分钟。使用方法:minute(time)。time参数的说明和hour函数相同。
  (9)Second函数:返回0到59之间的整数值,表示一分钟中的某秒。使用方法:second(time)。time参数的说明和hour函数相同。
  (10)Weekday函数:返回一个星期中某天的整数。使用方法:weekday(date)。关于参数date的说明和year函数相同。该函数返回值为“1”到“7”,分别代表“星期日”、“星期一”……“星期六”。比如当返回值是“4”时就表示“星期三”。
  (11)WeekDayName函数:返回一个星期中具体某天的字符串。相对weekday函数而言即翻译出“星期几”,使用方法:weekdayname(weekday)。参数weekday即星期中具体某天的数值。比如“weekdayname(weekday(date()))”就表示当前是“星期几”。因为“date()”表示的是当前的时间,而“weekday(date())”就表示的是一星期中具体某天的整数。
  当然weekdayname函数最终显示的字符串内容还与当前操作系统语系有关,比如中文操作系统将显示“星期一”这类的中文字符,而英文操作系统则显示为“Mon”(Monday简写)。
  此外,在VBScript中还有一些关于时间间隔的计算函数:
  (1)DateAdd函数:返回指定时间间隔的日期、时间。可以计算出相隔多少年、或相隔几个月、又或相隔几个小时等的新日期、时间。使用方法:dateadd(interval, number, date)。
  其中参数interval表示需要添加的时间间隔单位。其是以字符串的形式表达的,比如“yyyy”表示年,“q”表示季度,“m”表示月份,“d”表示天数,“ww”表示周数,“h”表示小时数,“n”表示分钟数,“s”表示秒数。
  而参数number则表示添加的时间间隔数。其是以数值的形式表达的,可以为负值。参数date则要求是日期、时间的正确格式。
  比如dateadd("d",100,"2006-5-20")就表示2006年5月20号以后的100天的日期值:2006-8-28。再比如dateadd("h",-12,"2005-5-2010:00:00")就表示2005年5月20号上午10点前的12小时的日期时间:2005-5-19 22:00:00。
  (2)DateDiff函数:返回两个日期时间之间的间隔。可计算出两个日期相隔的年代、小时数等。使用方法:datediff(interval,date1,date2)。
  参数interval和dateadd函数中的interval参数内容描述相同,date1和date2参数分别就是相互比较的两个日期时间。另外,当date1的日期时间值大于date2时,将显示为负值。
  比如DateDiff("yyyy","1982-7-18",date)表示某人的出生到现在已经多少年了。又比如DateDiff("d","1982-7-18","2062-7-18")则计算了80年过了多少天:29220。
  2,字符串处理函数
  在脚本的功能处理中,通常需要对一些字符串进行一些修饰性处理。比如过滤掉字符串中的敏感字眼以符合最终显示的要求;又比如一段较长的字符串,需要提取开头的几个字符时。
  (1)Asc函数:返回字符串中第一个字母对应的ANSI字符代码。使用方法:asc(string)。其中string参数表示字符串。
  (2)Chr函数:返回指定了ANSI 字符代码对应的字符。使用方法:chr(chrcode)。参数chrcode是相关的标识数字。该函数的功能和asc函数形成对应。
  比如:asc(“a”)表示小写字母“a”的ANSI字符“97”;同样chr(97)表示的就是“小写字母a”。另外chr(chrcode)中参数chrcode值为0到31的数字时,表示不可打印的ASCII码。比如“chr(10)”表示换行符,“chr(13)”表示回车符等,这常用于输入和显示格式的转换中。
  (3)Len函数:返回字符串内字符的数目(字节数)。使用方法:len(string)。比如len(“love”)的值就是4。
  (4)LCase函数:返回所有字符串的小写形式。使用方法:lcase(string)。比如lcase(“CNBruce”)返回为“cnbruce”。
  (5)UCase函数:返回所有字符串的大写形式。与lcase函数形成对应。同样,ucase(“CNBruce”)返回为“CNBRUCE”。
  (6)Trim函数、LTrim函数和RTrim函数:分别返回前导和后续不带空格、前导不带空格或后续不带空格的字符串内容。比如:
  trim(“ cnbruce ”)返回为“cnbruce”,前导和后续都不带空格;
  ltrim(“ cnbruce ”)返回为“cnbruce ”,前导不带空格;
  rtrim(“ cnbruce ”)返回为“ cnbruce”,后续不带空格;
  该函数常用于注册信息中,比如确保注册用户名前或后的空格。
  (7)Left函数:返回从字符串的左边算起的指定数目的字符。使用方法:left(string,length)。比如left(“brousce”,5)返回为“brous”,即前五位字符。
  (8)Right函数:返回从字符串的左边算起的指定数目的字符。使用方法:right(string,length)。比如right(“brousce”,4)返回为“usce”,即后四位字符。
  (9)instr函数:返回某字符串在另一字符串中第一次出现的位置。比如现在查找字母“A”在字符串“A110B121C119D1861”中第一次出现的位置,则可以 instr(my_string,"A110B121C119D1861")
  (10)Mid函数:从字符串中返回指定数目的字符。比如现在的“110”则应该是从字符串“A110B121C119D1861”的第2位取得3个单位的值:mid("A110B121C119D1861",2,3)
  (11)Replace函数:在字符串中查找、替代指定的字符串。replace(strtobesearched,strsearchfor,strreplacewith)其中strtobesearched是字符串,strsearchfor是被查找的子字符串,strreplacewith是用来替代的子字符串。比如replace(rscon,"<","<") 则表示将rscon中所有“<”的字符替换为“<”
  3,类型转换函数
  Cbool(string) 转换为布尔值
  Cbyte(string) 转换为字节类型的值
  Ccur(string) 转换为货币类值
  Cdate(string) 转换为日前类型的值
  Cdbl(string) 转换为双精度值
  Cint(string) 转换为整数值
  Clng(string) 转换为长整型的值
  Csng(string) 转换为单精度的值
  Cstr(var) 转换为字符串值
  Str(var) 数值转换为字符串
  Val(string) 字符串转换为数值
  4,运算函数
  Abs(nmb) 返回数子的绝对值
  Atn(nmb) 返回一个数的反正切
  Cos(nmb) 返回一个角度的余炫值
  Exp(nmb) 返回自然指数的次方值
  Int(nmb) 返回数字的整形(进位)部份
  Fix(nmb) 返回数字的整形(舍去)部份
  Formatpercent(表达式) 返回百分比
  Hex(nmb) 返回数据的16进制数
  Log(nmb) 返回自然对数
  Oct(nmb) 返回数字的8进制数
  Rnd 返回大于“0”而小于“1”的随机数,但此前需 randomize 声明产生随机种子
  Sgn(nmb) 判断一个数字的正负号
  Sin(nmb) 返回角度的正铉值
  Sqr(nmb) 返回数字的二次方根
  Tan(nmb) 返回一个数的正切值
  5,其他函数
  IsArray(var) 判断一个变量是否是数组
  IsDate(var) 判断一个变量是否是日期
  IsNull(var) 判断一个变量是否为空
  IsNumeric(var) 判断表达式是否包含数值
  IsObject(var) 判断一个变量是否是对象
  TypeName(var) 返回变量的数据类型
  Array(list) 返回数组
  Split(liststr) 从一个列表字符串中返回一个一维数组
  LBound(array) 返回数组的最小索引
  Ubound(array) 返回数组的最大索引
  CreateObject(class) 创建一个对象
  GetObject(pathfilename) 得到文件对象
asp中application和session对象
  一、application对象的成员概述
  application对象成员包括application对象的集合、方法和事件。
  ⒈application对象的集合
  contents集合:没有使用元素定义的存储于applicaiton对象中的所有变量的集合
  staticobjects:使用元素定义的存储于application对象中的所有变量 的集合
  例:在default.asp中有如下赋值
  application("a")="a"
  application("b")=128
  application("c")=false
  则有contents集合
  application.contents(1)="a" '也可写为application.contents("a")="a"
  application.contents(2)=128 '也可写为application.contents("b")=128
  application.contents(3)=false '也可写为application.contents("c")=false
  在此笔者推荐你在调用时使用类如application.contents("a")的方法,因为这样更为直观,如果用序号来表示的话则要考虑赋值的先后顺序。
  ⒉application对象的方法
  contents.remove("变量名"):从application.contents集合中删除指定的变量
  contents.removeall() :把application.contents集合中的所有变量删除
  lock() :锁定application对象,使得只有当前的asp页对内容能进行访问
  unlock() :解除对application对象的锁定
  例:在default.asp中:
  application("a")="a"
  application("b")=128
  application("c")=false
  response.write application.contents(1)&"
  "
  response.write application.contents(2)&"
  "
  response.write application.contents(3)&"
  "
  response.write "after remove b:"
  application.contents.remove("b")
  response.write application.contents(1)&"
  "
  response.write application.contents(2)&"
  "
  执行结果:
  a
  128
  false
  after remove b:
  a
  false
  如果要删除集合中所有变量用application.contents.removeall即可,至于lock和unlock方法在实际中经常用到,读者也比较熟悉,在此就不在累赘。
  ⒊application对象事件
  onstart:第一个访问服务器的用户第一次访问某一页面时发生
  onend :当最后一个用户的会话已经结束并且该会话的onend事件所有代码已经执行完毕后发生,或最后一个用户访问服务器一段时间(一般为20分钟)后仍然没有人访问该服务器产生。
  想要定义application对象的onstart和onend事件里做什么需要将代码写在global.asa这个文件里(下文有举例),并且将该文件放在站点的根目录下(一般是inetpubwwwroot)
  二、session对象的成员概述
  session对象的成员比application对象多一项属性,即:集合、属性、方法、事件
  ⒈session对象的集合
  contents :没有使用元素定义的存储于特定session对象的所有变量的集合。
  staticobject:使用元素定义的、存储于session对象中的所有变量的集合。
  例:在default.asp中有如下赋值
  session("a")="a"
  session("b")=128
  session("c")=false
  则有contents集合
  session.contents(1)="a" '也可写为session.contents("a")="a"
  session.contents(2)=128 '也可写为session.contents("b")=128
  session.contents(3)=false '也可写为session.contents("c")=false
  ⒉session对象的属性
  codepage: 可读/可写。整型。定义用于在浏览器中显示页内容的代码页。代码页是字符集的数字值,不同的语言使用不同的代码页。例如,ansi代码页为1252,日文代码页为932,简体中文代码页为936。
  lcid : 可读/可写。整型。定义发送给浏览器的页面地区标识。lcid是唯一地标识地区的一个国际标准缩写,例如,2057定义当前地区的货币符号是"£"。
  sessionid: 只读。长整型。返回本会话的会话标识符。每创建一个会话,由服务器自动分配一个标识符。可以根据它的值判断两个用户是谁先访问服务器。
  timeout : 可读/可写。整型。为会话定义以分钟为单位的超时限定。如果用户在这个时间内没有刷新或请求任何一个网页,则该用户产生的会话自动结束。缺省值是20。
  以上属性在实际应用中作用不大,而且基本上不需要怎么修改,这几个属性也没什么特殊的地方。
  ⒊session对象的方法
  contents.remove("变量名"): 从session.contents集合中删除指定的变量
  contents.removeall() : 删除session.contents集合中的所有变量
  abandon() : 结束当前用户会话并且撤消当前session对象。
  session对象的contents.remove("变量名")和contents.removeall()方法与application对象的基本上没什么区别,为帮助理解,大家可以参照上面的例子将application改为session。这里要说明一下的是contents.removeall()和abandon()的区别,执行这两个方法都会释放当前
  用户会话的所有session变量,不同的是contents.removeall()单纯地释放session变量的值而不终止当前的会话,而abandon()除了释放session变量外还会终止会话引发session_onend事件,希望大家注意两者的区别。
  ⒋session对象的事件
  onstart: 当asp用户会话产生时触发,一旦有任一用户对本服务器请求任一页面即产生该事件。
  onend : 当asp用户会话结束时触发,当使用abandon()方法或超时也会触发该事件。
  这两个事件和application的onstart、onend事件一样,也是必须放在global.asa文件里,下
  面就重点和大家研究一下这四个事件的使用。
  三、global.asa
  asp的application和session对象体现了其他asp内置对象所没有的特征--事件。每一个访客访问服务器时都会触发一个onstart事件(第一个访客会同时触发application和session的onstart事件,但application先于session),每个访客的会话结束时都会触发一个onend事件(最后一个访客会话结束时会同时触发application和session的onend事件,但session先于application)。
  onstart和onend这两个事件一般应用在虚拟社区中统计在线人数、修改用户的在线离线状态等。要具体定义这两个事件,需要将代码写在global.asa文件,并将该文件放在站点的根目录下(缺省是inetpubwwwroot)。另外,application和session对象规定了在onend事件里除了application对象外其他asp内置对象(response、request、server、session...)一概不能使用。以下举一个虚拟社区统计在线人数的例子来说明如何使用这两个事件。
  文件说明:
  global.asa 位于d:inetpubwwwroot目录下
  default.asp 位于d:inetpubwwwroot目录下,虚拟社区登录页面
  login.asp 位于d:inetpubwwwroot目录下,用于检测用户输入的用户名及密码
  index.asp 位于d:inetpubwwwroot目录下,虚拟社区首页
  bbs.mdb 位于d:inetpubwwwroot目录下,存储用户信息的数据库
  数据库(access)结构:
   ===bbs表===
  id 用户id,长整型
  name 用户名,文本型
  code 密码,文本型
  online 在线状态,是/否
   ===global.asa===
  <script language="vbscript" runat="server">
  sub application_onstart
   application("online")=0
  end sub
  sub application_onend
  nd sub
  sub session_onstart
  end sub
  sub session_onend
   if session.contents("pass") then '判断是否为登录用户的session_onend
  application.lock
  application("online")=application("online")-1
  application.unlock
   end if
  end sub
  </script>
  ===login.asp===
   ......'密码验证,连接数据库,检测用户输入的用户名及密码是否正确
  if 密码验证通过 then
   session("name")=rs("name")
   session("id")=rs("id")
   session("pass")=true
  else
   rs.close
   conn.close
   response.write "密码错误!"
   response.end
  end if
  application.lock
  application("online")=application("online")+1
  conn.execute ("update bbs set online=1 where id="&session("id"))'将用户的状态设为在线
  application.unlock
  rs.close
  conn.close
  response.redirect "index.asp" '初始化数据后跳转到社区首页
  ===========
  在本例中,用application("online")变量记录已经登录社区的在线人数,因为一旦有用户访问服务器而不管用户是否登录,都会产生onstart事件,所以不能在onstart事件里使applicaiton("online")加一。因为不管是否是登录用户的会话结束都会产生onend事件(假如有访客访问了服务器但并不登录社区,他的会话结束后也会产生onend事件),所以在session_onend事件里用了句if语句来判断是否为已登录用户的onend事件,如果是才将在线人数减一。
  这只是一个统计在线人数的简单例子,对于一个完整的虚拟社区来说,仅仅统计有多少人在线是不够的,在本例中数据库里有个online字段是用来记录用户的在线状态,用户登录的时候,在login.asp里将online设为1,但用户离线时并没有将online设为0,要完善它,就要修改一下session_onend事件,在该事件里将online设为0。
  ===global.sas===
  <script language="vbscript" runat="server">
  sub application_onstart
   application("online")=0
   set application("conn")=server.createobject("adodb.connection")
   application("db")=server.mappath("bs.mdb") '此处最好使用绝对路径bs.mdb,下文有详细介绍
  end sub
  sub application_onend
   set application("conn")=nothing
  end sub
   sub session_onstart
  end sub
  sub session_onend
   if session.contents("pass") then '判断是否为登录用户的session_onend
   application("con").open ="driver={microsoft access driver (*.mdb)};dbq="&application("db")
    application.lock
    application("online")=application("online")-1
    application("con").execute ("update friends set online=0 where id="&session.contents("id"))
    application.unlock
    application("con").close
   end if
  end sub
  </script>
  ==============
  至此,完整的代码已经完成了。因为在application和session的onend事件里不能使用server对象,所以要将数据库的连接及数据库在服务器上的物理地址(d:inetpubwwwrootbs.mdb)存储在application变量中,并在application_onstart事件中预先处理。同理,在session_onend事件中不能用session("pass")来代替session.contents("pass")(以下有详尽说明)。
  四、本文实例中值得引起注意的两点
  ⒈onend事件里的session.contents
  刚开始接触global.asa的朋友经常会将上面session_onend事件里的
  if session.contents("pass") then 写成
  if session("pass") then,
  这样的话系统不会提示错误,但是永远也不会执行then后面的内容,这是因为在onend事件里禁止使用session对象,但是可以用session对象的集合来调用session变量。因为iis并没提示任何错误信息,所以笔者曾经在这上面浪费了很多时间。在此希望大家引以为鉴!
  ⒉application_onstart事件里用server.mappath获取数据库的物理地址时应使用绝对地址为了说明这个问题,大家可以做个实验:将上面application_onstart事件里的
  application("db")=server.mappath("bs.mdb")改为:
  application("db")=server.mappath("bbs.mdb")
  然后在d:inetpubwwwroot目录下建立一个test子目录,写一个temp.asp在test目录里。
  ====test.asp====
  <%response.write application("db")%>
  ================
  再将temp.asp拷贝一份放在根目录下(d:inetpubwwwroot)。用记事本打开global.asa,再打开两个浏览器,浏览器a输入地址http://localhost/temp.asp,按回车,将在浏览器上输出:
  d:inetpubwwwrootbs.mdb
  然后,在记事本的窗口上点"文件"菜单,选"保存"(使global.asa的修改时间改变,从而使iis重启动所有服务),再在浏览器b输入地址http://localhost/test/temp.asp,按回车,在浏览器上输出的是:
  d:inetpubwwwroot estbs.mdb
  global.asa文件虽然是放在站点根目录下,但是如果在server.mappath中使用的是相对地址,而触发application_onstart事件的用户第一次访问的页面又不是属于根目录的话,得到数据库的物理地址将不会是期望的结果,希望大家要特别小心。
  类别:web | 编辑 | 删除
  | 评论(0) | 浏览(0)
  全面解析asp server对象
  2007-07-27 12:40
  server对象提供对服务器上访问的方法和属性.大多数方法和属性是作为实用程序的功能提供的。
  语法:
   server.property|method
  属性(property)
   server对象只有一个属性:scripttimeout 程序能够运行的最大时间
  方法(methods)
   createobject 建立一个对象实例.
   execute 执行一个asp文件
   getlasterror 返回一个错误代码
   htmlencode 对指定的html代码进行转换.
   mappath 将一个相对路径转化为一个绝对路径.
   transfer 将当前的所有状态信息发送给另一个asp文件
   urlencode 以url形式转化指定的代码,包括空格
  server对象的方法详细说明
   createobject
   语法
   server.createobject( progid )
   参数
  progid
  指定要创建的组件名称,格式如下: [vendor.]component[.version].
   要点:
  一般来说,用由server.createobject方法创建的对象拥有页面的范围.这就说,当这页的asp程序执行完后,这种对象会自动地消失.
  为了创建一个拥有session或application范围的对象,你可以在global.asa文件中使用
  execute
  execute 方法呼叫一个asp文件并且执行它就像这个呼叫的asp文件存在这个asp文件中一样。这很像许多语言中的类的调用。
  语法
  server.execute( path )
  参数
   path
  指定执行的那个asp文件的路径。如是它是一个绝对路径,那么它必须是一个在这个asp应用程序相同的地方(目录)。
  讲解
  server.execute 方法提供了一种将一个复杂asp应用程序分化为小块单位来执行的方法。通过这种方法,你能够建一个asp图书馆,你能够随便在你需要时调用你图书馆中的asp文件。这个就有点像ssi了!嘿嘿!
  当iis根据指定的asp文件路径执行完这个asp文件之后,就会自动返回以前的asp文件。这个刚刚执行完的asp文件有可能改变了http head.但是和其它的asp文件一样,当程序试图改变http head时,就会报错!
  这个path参数可以包括一个询问信息。
  如果在被呼叫和呼叫的asp文件中都含有相同的子函数,那么这些子函数只在本asp文件中起作用。举个例子,如果在下面的asp1和asp2两个文件中都含有放弃程序的子函数。首先asp1呼叫asp2,那么asp2中的的ontransactionabort开始执行,当asp2执行完毕,asp1中的ontransactionabort才开始执行。
  
   asp1:
  < %@ transaction=
  required
  %>
  < %
   server.execute (".asp")
   sub ontransactionabort
   sub ontransactioncommit
  %>
  asp2.asp:
  < %@
   transaction=required
   sub ontransactionabort
   sub ontransactioncommit
  %>
  example
  asp1
  < % response.write("i am going to execute asp2 ")
  server.execute("/myasps/asp2.asp")
  %>
  asp2
  < % response.write("here i am")%>
  getlasterror
  getlasterror 方法返回一个asperror object 来描述一个错误信息.这个方法只适用于在asp文件发送任何内容给用户机之前.
  语法
  server.getlasterror ()
  要点
  如果一个500;100 用户错误已经被定义在一个asp应用程序中,它是指的一个以.asp为后缀的文件。这种情况下,在这个程序运行时当一个错误发生时,服务器就会自动的以server.transfer这种方式传送到这个正在执行的asp页面。asp应用程序就会将有效的处理这个错误。另外,这个asperror object一定要有效,这样你就能够看到服务器提供给你的错误信息来改这个文件了!
  一般的web site 都是根据文件iishelpcommon500-100.asp来构造的。你能够用它来执行一个asp错误,当然你能够自己定义了!。如果你想改变为另外一个asp文件的来执行这些用户错误。那么你可以用iis中的snap-in.
  注意:当iis发现了一个asp文件或者global.asa文件中的一个错误,那么一个500;100用户错误产生。以下的程序将不能执行!
  example
  下面的三个例子证明不同的错误会产生的用户错误。三个错误是:
  编译错误
  运行错误
  逻辑错误
  第一个例子证明了一个编译错误,就是当iis试图包含一个文件时产生的。这个错误会产生是因为在这个包含文件中没有定义所需的参数。第二个例子显示的是一个运行错误,这个程序中断的原因是程序中没有“next".第三个例子显示的是一个逻辑错误,因为这个程序试图除以一个0. 不行啦!
  example 1
  < %
  response.write "hello"
  %>
  example 2
  < %
  dim i
  for i=1 to 1
  nxt
  %>
  example 3
  < %
  dim i,j
  dim sum
  sum=0
  j=0
  for i=1 to 10
   sum=sum+1
  next
  sum=sum/j
  %>
  htmlencode
  htmlencode方法对指定的字符串进行html编码.
  语法
   serverlencode( string )
  参数
   string 要进行编码的字符
  例子
   下面的程序:
  < %= serverlencode("the paragraph tag: ") %>
  输出为:
  the paragraph tag:
  注意 程序执行后在浏览器中看到的是:
  the paragraph tag:
  但是如果你用"查看源文件"看一下的话,源代码就不是了.
  mappath
  mappath 方法将相对路径转化为服务器上的物理路径
  语法
  server.mappath( path )
  参数
  path
  相对路径。这个路径是以"/"或""开头的路径,如果这个路径中没有"",那么mappath方法就会返回以当前目录为基础的路径。
  讲解
  mappath 方法不能检查路径在这个服务器下是否存在。因为 mappath 转化路径时是不管这个路径是否在这个服务器下存在的。
  你能够用它来将一个相对路径转化为一个物理路径,然后再在这个路径下进行各种操作。
  example
  在下面的例子中,data.txt文件存在 c:inetpubwwwrootscript 目录中,而且一个test.asp 文件包括下面的代码。c:inetpubwwwroot 是该服务器的主目录 。
  下面的例子中,首先用环境变量"path_info"获得当前文件的物理路径。
  下面是script 代码:
  < %= server.mappath(request.servervariables("path_info"))%>
  显示为:
  c:inetpubwwwrootscript est.asp
  因为下面的例子中路径参数没有以"/"开头,所以它是以当前目录转化的,asp文件是放在c:inetpubwwwrootscript中的.以下是 scripts的内容:
  < %= server.mappath("data.txt")%>
  < %= server.mappath("script/data.txt")%>
  显示为:
  c:inetpubwwwrootscriptdata.txt
  c:inetpubwwwrootscriptscriptdata.txt
  以下的两个例子是以"/"开头的.以下是scripts的内容:
  < %= server.mappath("script")%>
  显示为:
  c:inetpubwwwrootscriptdata.txt
  c:inetpubwwwrootscript
  直接用"/"或""就会得到服务器的主目录:
  < %= server.mappath("")%>
  显示为:
  
  c:inetpubwwwroot
  c:inetpubwwwroot
  transfer
  transfer 方法会把一个正在执行的asp文件的所有信息传给另外一人asp文件。
  语法
  server.transfer (path)
  参数
  path
  将要接收信息的asp文件的位置。
  要点
  当你调用server.transfer时,所有内建对象的状态信息都会包含在这次传送之中。这就是说,所有在保存在session或application中的信息都会被传送,而且,所有当前请求的信息都会被接收信息的asp文件所接受。
  example
  下面的例子示范了从一个asp文件传送到另一个asp文件例子!
  asp1
  < % dim sessvar1 response.write session.sessionid
   response.write ("")
   response.write("i am going to asp2 ")
   server.
  transfer
  ("/myasps/asp2.asp")
  % >
  
   asp2
  < % response.write session.sessionid %>
  urlencode
  urlencode 方法可以将指定字符串进行url编码。
  语法
  server.urlencode( string )
  参数
  string 指定要转化的字符串
  example
  下面是代码:
  < % respones.write(server.urlencode("http://www.microsoft.com")) % >
  显示为:
  http%3a%2f%2fwww%2emicrosoft%2ecom
  属性:scripttimeout
  scripttimeout 属性规定了程序的最大运行时间。
  语法
  server.scripttimeout = numseconds
  参数
  numseconds
  规定了程序的最大的运行时间(以秒计算)。缺省值是90秒
  remarks
  一个缺省的scritpt timeout的值会能过aspscripttimeout属性来设置在web sertvic 或 web server上。在程序中,scripttimeout属性的值不能小于这个缺省值。举个例子吧,如果numseconds我们设置为10秒,而缺省值为90秒,那么程序就会中止在90秒以后,而不是10秒以后的。同样,如果我们设置scripttimeout的值为100秒,那么,程序就会在100秒之后中止,而不是90秒。
  example
  下面的例了中程序将被设置为100秒后自动中止。
  < % server.scripttimeout = 100 %>
  下面的例子中将重新得到scripttimeout的值,然后把它存在timout变量中
  < % timeout = server.scripttimeout %>
  asp内置对象request的servervariables集合列表
  request.servervariables("url")
  返回服务器地址
  request.servervariables("path_info")
  客户端提供的路径信息
  request.servervariables("appl_physical_path")
  与应用程序元数据库路径相应的物理路径
  request.servervariables("path_translated")
  通过由虚拟至物理的映射后得到的路径
  request.servervariables("script_name")
  执行脚本的名称
  request.servervariables("query_string")
  查询字符串内容
  request.servervariables("http_referer")
  请求的字符串内容
  request.servervariables("server_port")
  接受请求的服务器端口号
  request.servervariables("remote_addr")
  发出请求的远程主机的ip地址
  request.servervariables("remote_host")
  发出请求的远程主机名称
  request.servervariables("local_addr")
  返回接受请求的服务器地址
  request.servervariables("http_host")
  返回服务器地址
  request.servervariables("server_name")
  服务器的主机名、dns地址或ip地址
  request.servervariables("request_method")
  提出请求的方法比如get、head、post等等
  request.servervariables("server_port_secure")
  如果接受请求的服务器端口为安全端口时,则为1,否则为0
  request.servervariables("server_protocol")
  服务器使用的协议的名称和版本
  request.servervariables("server_software")
  应答请求并运行网关的服务器软件的名称和版本
  request.servervariables("all_http")
  客户端发送的所有http标头,前缀http_
  request.servervariables("all_raw")
  客户端发送的所有http标头,其结果和客户端发送时一样,没有前缀http_
  request.servervariables("appl_md_path")
  应用程序的元数据库路径
  request.servervariables("content_length")
  客户端发出内容的长度
  request.servervariables("https")
  如果请求穿过安全通道(ssl),则返回on如果请求来自非安全通道,则返回off
  request.servervariables("instance_id")
  iis实例的id号
  request.servervariables("instance_meta_path")
  响应请求的iis实例的元数据库路径
  request.servervariables("http_accept_encoding")
  返回内容如:gzip,deflate
  request.servervariables("http_accept_language")
  返回内容如:en-us
  request.servervariables("http_connection")
  返回内容:keep-alive
  request.servervariables("http_cookie")
  request.servervariables("http_user_agent")
  返回内容:mozilla/4.0(compatible;msie6.0;windowsnt5.1;sv1)
  request.servervariables("https_keysize")
  安全套接字层连接关键字的位数,如128
  request.servervariables("https_secretkeysize")
  服务器验证私人关键字的位数如1024
  request.servervariables("https_server_issuer")
  服务器证书的发行者字段
  request.servervariables("https_server_subject")
  服务器证书的主题字段
  request.servervariables("auth_password")
  当使用基本验证模式时,客户在密码对话框中输入的密码
  request.serve
附录4:asp常用函数介绍
  1.函数array()
  功能:创建一个数组变量
  格式:array(list)
  参数:list 为数组变量中的每个数值列,中间用逗号间隔
  例子:
  <% i = array ("1","2","3") %>
  结果: i 被赋予为数组
  2.函数Cint()
  功能:将一表达式/其它类型的变量转换成整数类型(int)
  格式:Cint(expression)
  参数:expression 是任何有效的表达式/其它类型的变量
  例子:
  <%
  f = "234"
  response.write cINT(f) + 2
  %>
  结果: 236
  函数Cint()将字符"234"转换 成整数234.如果表达式为空, 或者无效时,返回值为0;
  3.函数:Creatobject()
  功能:创建及返回一个ActiveX对象.
  格式:Creatobject(obname)
  参数bname 是对象的名称
  例子:
  <%
  Set con = Server.CreateObject("ADODB.Connection")
  %>
  结果:
  4.函数Cstr()
  功能:将一表达式/其它类型的变量转换成字符类型(string)
  格式:Cstr(expression)
  参数:expression是任何有效的表达式/其它类型的变量
  例子:
  <%
  s = 3 + 2
  response.write "The result is: " & cStr(s)
  %>
  结果:函数Cstr()将整数 5 转换 成字符"5".
  5.函数Date()
  功能:返回当前系统(server端)的日期
  格式: Date()
  参数:无
  例子<% date () %>
  结果:05/10/00
  5.1 Instr()
  函数返回字符或字符串在另一个字符串中第一次出现的位置.
  表达式 Instr([start, ] strToBeSearched, strSearchFor [, compare])
  允许数据类型: Start为搜索的起始值,strToBeSearched接受搜索的字符串 strSearchFor要搜索的字符.compare比较方式(详细见asp常数)
  实例: <%
  strText = "This is a test!!"
  pos = Instr(strText, "a")
  response.write pos
  %>
  返回结果: 9
  6.函数Dateadd()
  功能:计算某个指定的时间和
  格式: dateadd(timeinterval,number,date)
  参数:timeinterval是时间单位(月,日..); number是时间间隔值,date是时间始点.
  例子:
  <%
  currentDate = #8/4/99#
  newDate = DateAdd("m",3,currentDate)
  response.write newDate
  %> <%
  currentDate = #12:34:45 PM#
  newDate = DateAdd("h",3,currentDate)
  response.write newDate
  %>
  结果:
  11/4/99
  3:34:45 PM
  其中
  "m" = "month";
  "d" = "day";
  如果是currentDate 格式,则,
  "h" = "hour";
  "s" = "second";
  7.函数Datediff()
  功能:计算某量个指定的时间差
  格式: datediff(timeinterval,date1,date2[,firstdayofweek[,firstdayofyear]])
  参数: timeinterval 是时间单位; date1,date2是有效的日期表达式,firstdayofweek,firstdayofyear 是任意选项.
  例子:
  <%
  fromDate = #8/4/99#
  toDate = #1/1/2000#
  response.write "There are " & _
  DateDiff("d",fromDate,toDate) & _
  " days to millenium from 8/4/99."
  %>
  结果:There are 150 days to millenium from 8/4/99.
  8.函数day()
  功能:返回一个整数值,对应于某月的某日
  格式: day(date)
  参数: date是一个有效的日期表达式;
  例子<% =date(#8/4/99#) %>
  结果:4
  9.函数formatcurrency()
  功能:转换成货币格式
  格式: formatcurrency(expression [,digit[,leadingdigit[,paren[,groupdigit]]]])
  参数: expression 是有效的数字表达式;digit表示小数点后的位数;leadingdigit,paren,groupdigit是任意选项.
  例子<%=FormatCurrency(34.3456)%>
  结果34.35
  10.函数Formatdatetime()
  功能:格式化日期表达式/变量
  格式: formatdatetime(date[,nameformat])
  参数: date为有效的日期表达式/变量;nameformat是指定的日期格式常量名称.
  例子<% =formatdatetime("08/04/99",vblongdate) %>
  结果:Wednesday,August 04,1999
  说明:
  描述
  返回表达式,此表达式已被格式化为日期或时间。
  语法
  FormatDateTime(Date[, NamedFormat])
  FormatDateTime 函数的语法有以下参数:
  参数 描述
  Date 必选项。要被格式化的日期表达式。
  NamedFormat 可选项。指示所使用的日期/时间格式的数值,如果省略,则使用 vbGeneralDate。
  设置
  NamedFormat 参数可以有以下值:
  常数 值 描述
  vbGeneralDate 0 显示日期和/或时间。如果有日期部分,则将该部分显示为短日期格式。如果有时间部分,则将该部分显示为长时间格式。如果都存在,则显示所有部分。
  vbLongDate 1 使用计算机区域设置中指定的长日期格式显示日期。
  vbShortDate 2 使用计算机区域设置中指定的短日期格式显示日期。
  vbLongTime 3 使用计算机区域设置中指定的时间格式显示时间。
  vbShortTime 4 使用 24 小时格式 (hh:mm) 显示时间。
  说明
  下面例子利用 FormatDateTime 函数把表达式格式化为长日期型并且把它赋给 MyDateTime:
  Function GetCurrentDate
  "FormatDateTime 把日期型格式化为长日期型。
  GetCurrentDate = FormatDateTime(Date, 1)
  End Function
  11.函数Isnumeric()
  功能:返回一个布尔值,判断变量是否为数字变量,或者是可以转换成数字的其它变量.
  格式:isnumeric(expression)
  参数:expression 是任意的变量.
  例子:
  <%
  i="234"
  response.write isnumeric(i)
  %>
  结果: true.
  12.函数Isobject()
  功能:返回一个布尔值,判断变量是否为对象的变量,
  格式: isobject(expression)
  参数: expression 是任意的变量.
  例子:
  <%
  set con =server.creatobject("adodb.connection")
  response.write isobject(con)
  %>
  结果: true
  13.函数:Lbound()
  功能:返回一个数组的下界.
  格式:Lbound(arrayname[,dimension])
  参数:arrayname 是数组变量,dimension 是任意项
  例子:
  <%
  i = array("1","2","3")
  response.write lbound(i)
  %>
  结果:0
  14.函数Lcase()
  功能:将一字符类型变量的字符全部变换小写字符.
  格式:Lcase(string)
  参数:string是字符串变量
  例子:
  <%
  str="THIS is Lcase!"
  response.write Lcase(str)
  %>
  结果:this is lcase!
  15.函数left()
  功能:截取一个字符串的前部分;
  格式:left(string,length)
  参数:string字符串,length截取的长度.
  例子: <% =left("this is a test!",6) %>
  结果:this i
  16.函数len()
  功能:返回字符串长度或者变量的字节长度
  格式:len(string *varname)
  参数:string字符串;varname任意的变量名称
  例子:
  <%
  strtest="this is a test!"
  response.write left(strtest)
  %>
  结果:15
  17.函数ltrim()
  功能:去掉字符串前的空格.
  格式:ltrim(string)
  参数:string 字符串.
  例子: <% =ltrim (" this is a test!")
  结果:this is a test!
  18.函数Mid()
  功能:从字符串中截取字符串.
  格式:mid(string,start [,length])
  参数:string字符串,start截取的起点,length要截取的长度.
  例子:
  <%
  strtest="this is a test, Today is Monday!"
  response.write mid(strtest,17,5)
  %>
  结果:Today
  19.函数minute()
  功能:返回一数值, 表示分钟
  格式:minute(time)
  参数: time是时间变量
  例子lt;% =minute(#12:23:34#) %>
  结果:23
  20.函数month()
  功能:返回一数值, 表示月份
  格式:month(time)
  参数:time是日期变量
  例子<% =month(#08/09/99) %>
  结果:9
  21.函数monthname()
  功能:返回月份的字符串(名称).
  格式:Monthname(date [,abb])
  参数: date是日期变量,abb=true时 则月份的缩写,
  例子:
  <% =monthname(#4/5/99#) %>
  结果:April
  22.函数Now()
  功能:返回系统的当前时间和日期.
  格式:now()
  参数:无
  例子:
  <% =now() %>
  结果: 05/10/00 8:45:32 pm
  23.函数:replace()
  功能:在字符串中查找,替代指定的字符串.
  格式:replace(strtobesearched,strsearchfor,strreplacewith [,start[,count[,compare]]])
  参数:strtobesearched是字符串; strsearchfor是被查找的子字符串;strreplacewith 是用来替代的子字符串.start,count,compare 是任意选项.
  例子:
  <%
  strtest="this is an apple."
  response.write replace(strtest,"apple","orange")
  %>
  结果:this is an orange.
  24.函数right()
  功能:截取一个字符串的后部分
  格式:right(string,length)
  参数:string字符串,length截取的长度.
  例子:
  <%
  strtest="this is a test!"
  response.write right(strtest,3)
  %>
  结果:st!
  25.函数rnd()
  功能:返回一个随机数值
  格式:rnd[(number)]
  参数:number是任意数值.
  例子:
  <%
  randomize()
  response.write rnd()
  %>
  结果:0/1数值之一,无randomize(), 则不能产生随机数.
  26.函数round()
  功能:完整数值
  格式:round(expression[,numright])
  参数:expression数字表达式;numright任意选项.
  例子:
  <%
  i=12.33654
  response.write round(i)
  %>
  结果: 12
  27.函数rtrim()
  功能:去掉字符串后的空格.
  格式:rtrim(string)
  参数:string 是字符串
  例子:
  <%
  response.write rtrim("this is a test! ")
  %>
  结果:this is a test!
  28.函数second()
  功能:返回一个整数值.
  格式:second(time)
  参数:time是一个有效的时间表达式;
  例子lt;% =second(# 12:28:30#) %>
  结果:30
  29.函数strReverse()
  功能:返回与原字符串排列逆向的字符串.
  格式:strreverse(string)
  参数:string是字符串
  例子<% =strreverse("this is a test!")
  结果:!tset a si siht
  30.函数time()
  功能:返回当前系统的时间值.
  格式:time()
  参数:无
  结果:9:58:28 Am
  31.函数trim()
  功能:删去字符串前,后的空格.
  格式:trim(string)
  参数:string 字符串.
  例子:
  <%
  strtest=" this is a test! "
  response.write trim(strtest)
  %>
  结果:this is a test!
  32.函数UBound()
  功能:返回一个数组的上界.
  格式:Ubound(expression [,dimension])
  参数:expression 是数组表达式/数组变量,dimension 是任意项
  例子:
  <%
  i = array("1","2","3")
  response.write ubound(i)
  %>
  结果: 2
  33.函数:UCase()
  功能:将一字符类型变量的字符全部变换成大写字符.
  格式:Ucase(string)
  参数:string是字符串变量
  例子:
  <%
  str="THIS is Lcase!"
  response.write Lcase(str)
  %>
  结果:THIS IS LCASE!
  34.函数Vartype()
  功能:返回变量的常量代码(整数)
  格式:Vartype(varname)
  参数:varname是任何类型的变量名称.
  例子:
  <%
  i=5
  response.write vartype(i)
  %>
  结果:2 (2表示整数,须要参考asp常量代码.)
  35.函数Weekday()
  功能:返回一个整数,对应一周中的第几天.
  格式:Weekday(date [,firstofweek])
  参数: date为日期变量,firstofweek为任选项.
  例子:
  <%
  d= # 5/9/00 #
  response.write weekday(d) %>
  结果:3(3 表示是星期二)
  36.函数weekdayname()
  功能:返回字符串,对应星期几.
  格式:weekdayname(weekday[,abb[,firstdayofweek]])
  参数:weekday为日期变量,abb,firstdayofweek为任选项.
  例子:
  <%
  d = #8/4/99#
  response.write weekdayname(d)
  %>
  结果: Wednesday
  37.函数year()
  功能:返回日期表达式所在的年份.
  格式:year(date)
  参数: date是有效的日期表达式
  例子:
  <% =year(#8/9/99#) %>
  结果:1999
  38.函数Mod()功能:取余数.
  例子:3 Mod 2
  结果:1
附录5:asp网页提升速度方法5则
  技巧之一:提高使用Request集合的效率
  访问一个asp集合来提取一个值是费时的、占用计算资源的过程。因为这个操作包含了一系列对相关集合的搜索,这比访问一个局部变量要慢得多。因此,如果打算在页面中多次使用Request集合中的一个值,应该考虑将其存贮为一个局部变量。例如将代码写成下面的形式以加快脚本引擎处理速度:
  strTitle=Request.Form("Title")
  strFirstName=Request.Form("FirstName")
  strLastName=Request.Form("LastName")
  If Len(strTitle) Then strTitle=strTitle & " "
  If strFirstName="" Then strFullName=strTitle & " " & strLastName
  Elseif Len(strFirstName)=1 Then
  strFullName=strTitle & strFirstName & ". " & strLastName
  Else
  strFullName=strTitle & strFirstName & " " & strLastName
  End If
  技巧之二:直接访问适当的集合
  如果不是别无选择,否则不要使用strPage=Request("page")的这样的形式来获取参数,因为这将按顺序搜索全部的集合—QueryString、Form、Cookies、ClientCertificate、ServerVarible直到发现第一个匹配值的名称。这样做比直接访问适当的集合效率低,并且是不安全的,除非能绝对保证这个值不会出现在另外一个集合中。
  例如,可能希望搜索满足客户请求的WEB服务器名称,这通过出现在每个查询中的Request.ServerVarables集合中寻找“SERVER_NAME”来实现。然而,假如其他的集合也包含名为“SERVER_NAME”的值(键名不区分大小写),当使用Request("server_Name")时,就会得到错误的结果。总而言之,应尽可能直接访问适当的集合。
  技巧之三:在费时操作前使用Response.IsClientConnected属性
  使用Response.IsClientConnected是观察用户是否仍连到服务器并正在载入asp创建的网页的有用方式。如果用户断开连接或停止下载,我们就不用再浪费服务器的资源创建网页,因为缓冲区内容将被IIS丢弃。所以,对那些需要大量时间计算或资源使用较多的网页来说,值得在每一阶段都检查游览者是否已离线:
  …… Code to create first part of the page
  If Response.IsClientConnected Then
  Response.Flush
  Else
  Response.End
  End If
  …… Code to create next part of page
  技巧之四:优化asp中的ADO操作
  通常面言,数据构成了WEB站点的实际内容。所以,优化ADO操作以加速asp代码执行,十分有用:
  a.仅选择所需的列:当打开ADO记录集时,除非需要获得所有的列,否则不应自动地使用表名(即SELECT*)。使用单独的列意味着将减少发送到服务器或从服务器取出的数据量。即使需要使用全部列,单独地命名每个列也会获得最佳的性能,因为服务器不必再解释这些列的名字。
  b. 尽可能的使用存储过程。存储过程是预先编译的程序,含有一个已经准备好的执行计划,所以比SQL语句执行更快。
  c. 使用适当的光标和锁定模式。如果所做的全部工作只是从记录集中读取数据,并将其显示在屏幕上,那么就使用缺省的只能前移、只读的记录集。ADO用来维护记录和锁定的细节的工作越少,执行的性能就越高。
  d. 使用对象变量。当遍历记录集时一个肯定能提高性能的方法是使用对象变量指向集合中的成员。例如:
  While Not RsGc.EOF
  Response.Write "工程名称:" & RsGc("GcMC") & "(工程代码:" & RsGc("GcCode") & ")
  "
  RsGc.MoveNext
  Wend
  可以用改写为下面的代码以加快执行:
  set GcMc=RsGc("GcMc")
  set GcCode=RsGc("GcCode")
  While Not rsGc.EOF Response.Write "工程名称:" & GcMc & "(工程代码:" & GcCode & ")
  " RsGc.MoveNext
  Wend
  新的代码建立了对象变量的引用,所以可以使用对象变量而不是实际的变量,这意味着脚本引擎的工作减少了,因为在集合中进行索引的次数变少了。
  技巧五:不要混用脚本引擎
  我们知道,asp页面中既可以使用VBScript,也可以使用JScript。但是在同一个页面上同时使用JScript和VBScript则是不可取的。因为服务器必须实例化并尝试缓存两个(而不是一个)脚本引擎,这在一定程度上增加了系统负担。因此,从性能上考虑,不应在同一页面中混用多种脚本引擎。
附录4:asp常用函数介绍
  1.函数array() 
  功能:创建一个数组变量 
  格式:array(list) 
  参数:list 为数组变量中的每个数值列,中间用逗号间隔 
  例子: 
  <% i = array ("1","2","3") %> 
  结果: i 被赋予为数组
  2.函数Cint() 
  功能:将一表达式/其它类型的变量转换成整数类型(int) 
  格式:Cint(expression) 
  参数:expression 是任何有效的表达式/其它类型的变量 
  例子: 
  <% 
  f = "234" 
  response.write cINT(f) + 2 
  %> 
  结果: 236 
  函数Cint()将字符"234"转换 成整数234.如果表达式为空, 或者无效时,返回值为0; 
  3.函数:Creatobject() 
  功能:创建及返回一个ActiveX对象. 
  格式:Creatobject(obname) 
  参数bname 是对象的名称 
  例子: 
  <% 
  Set con = Server.CreateObject("ADODB.Connection") 
  %> 
  结果: 
  4.函数Cstr() 
  功能:将一表达式/其它类型的变量转换成字符类型(string) 
  格式:Cstr(expression) 
  参数:expression是任何有效的表达式/其它类型的变量 
  例子: 
  <% 
  s = 3 + 2 
  response.write "The result is: " & cStr(s) 
  %> 
  结果:函数Cstr()将整数 5 转换 成字符"5". 
  5.函数Date() 
  功能:返回当前系统(server端)的日期 
  格式: Date() 
  参数:无 
  例子<% date () %> 
  结果:05/10/00 
  5.1 Instr()
  函数返回字符或字符串在另一个字符串中第一次出现的位置.
  表达式 Instr([start, ] strToBeSearched, strSearchFor [, compare])
  允许数据类型: Start为搜索的起始值,strToBeSearched接受搜索的字符串 strSearchFor要搜索的字符.compare比较方式(详细见asp常数)
  实例: <%
  strText = "This is a test!!"
  pos = Instr(strText, "a")
  response.write pos
  %>
  返回结果: 9
  6.函数Dateadd() 
  功能:计算某个指定的时间和 
  格式: dateadd(timeinterval,number,date) 
  参数:timeinterval是时间单位(月,日..); number是时间间隔值,date是时间始点. 
  例子: 
  <% 
  currentDate = #8/4/99# 
  newDate = DateAdd("m",3,currentDate) 
  response.write newDate 
  %> <% 
  currentDate = #12:34:45 PM# 
  newDate = DateAdd("h",3,currentDate) 
  response.write newDate 
  %> 
  结果: 
  11/4/99 
  3:34:45 PM 
  其中 
  "m" = "month"; 
  "d" = "day"; 
  如果是currentDate 格式,则, 
  "h" = "hour"; 
  "s" = "second"; 
  7.函数Datediff() 
  功能:计算某量个指定的时间差 
  格式: datediff(timeinterval,date1,date2[,firstdayofweek[,firstdayofyear]]) 
  参数: timeinterval 是时间单位; date1,date2是有效的日期表达式,firstdayofweek,firstdayofyear 是任意选项. 
  例子: 
  <% 
  fromDate = #8/4/99# 
  toDate = #1/1/2000# 
  response.write "There are " & _ 
  DateDiff("d",fromDate,toDate) & _ 
  " days to millenium from 8/4/99." 
  %> 
  结果:There are 150 days to millenium from 8/4/99. 
  8.函数day() 
  功能:返回一个整数值,对应于某月的某日 
  格式: day(date) 
  参数: date是一个有效的日期表达式; 
  例子<% =date(#8/4/99#) %> 
  结果:4 
  9.函数formatcurrency() 
  功能:转换成货币格式 
  格式: formatcurrency(expression [,digit[,leadingdigit[,paren[,groupdigit]]]]) 
  参数: expression 是有效的数字表达式;digit表示小数点后的位数;leadingdigit,paren,groupdigit是任意选项. 
  例子<%=FormatCurrency(34.3456)%> 
  结果34.35 
  10.函数Formatdatetime() 
  功能:格式化日期表达式/变量 
  格式: formatdatetime(date[,nameformat]) 
  参数: date为有效的日期表达式/变量;nameformat是指定的日期格式常量名称. 
  例子<% =formatdatetime("08/04/99",vblongdate) %> 
  结果:Wednesday,August 04,1999 
  说明: 
  描述
  返回表达式,此表达式已被格式化为日期或时间。 
  语法
  FormatDateTime(Date[, NamedFormat])
  FormatDateTime 函数的语法有以下参数:
  参数 描述 
  Date 必选项。要被格式化的日期表达式。 
  NamedFormat 可选项。指示所使用的日期/时间格式的数值,如果省略,则使用 vbGeneralDate。 
  设置
  NamedFormat 参数可以有以下值:
  常数 值 描述 
  vbGeneralDate 0 显示日期和/或时间。如果有日期部分,则将该部分显示为短日期格式。如果有时间部分,则将该部分显示为长时间格式。如果都存在,则显示所有部分。 
  vbLongDate 1 使用计算机区域设置中指定的长日期格式显示日期。 
  vbShortDate 2 使用计算机区域设置中指定的短日期格式显示日期。 
  vbLongTime 3 使用计算机区域设置中指定的时间格式显示时间。 
  vbShortTime 4 使用 24 小时格式 (hh:mm) 显示时间。 
  说明
  下面例子利用 FormatDateTime 函数把表达式格式化为长日期型并且把它赋给 MyDateTime: 
  Function GetCurrentDate 
  "FormatDateTime 把日期型格式化为长日期型。
  GetCurrentDate = FormatDateTime(Date, 1) 
  End Function
  11.函数Isnumeric() 
  功能:返回一个布尔值,判断变量是否为数字变量,或者是可以转换成数字的其它变量. 
  格式:isnumeric(expression) 
  参数:expression 是任意的变量. 
  例子: 
  <% 
  i="234" 
  response.write isnumeric(i) 
  %> 
  结果: true. 
  12.函数Isobject() 
  功能:返回一个布尔值,判断变量是否为对象的变量, 
  格式: isobject(expression) 
  参数: expression 是任意的变量. 
  例子: 
  <% 
  set con =server.creatobject("adodb.connection") 
  response.write isobject(con) 
  %> 
  结果: true 
  13.函数:Lbound() 
  功能:返回一个数组的下界. 
  格式:Lbound(arrayname[,dimension]) 
  参数:arrayname 是数组变量,dimension 是任意项 
  例子: 
  <% 
  i = array("1","2","3") 
  response.write lbound(i) 
  %> 
  结果:0
  14.函数Lcase() 
  功能:将一字符类型变量的字符全部变换小写字符. 
  格式:Lcase(string) 
  参数:string是字符串变量 
  例子: 
  <% 
  str="THIS is Lcase!" 
  response.write Lcase(str) 
  %> 
  结果:this is lcase! 
  15.函数left() 
  功能:截取一个字符串的前部分; 
  格式:left(string,length) 
  参数:string字符串,length截取的长度. 
  例子: <% =left("this is a test!",6) %> 
  结果:this i 
  16.函数len() 
  功能:返回字符串长度或者变量的字节长度 
  格式:len(string *varname) 
  参数:string字符串;varname任意的变量名称 
  例子: 
  <% 
  strtest="this is a test!" 
  response.write left(strtest) 
  %> 
  结果:15 
  17.函数ltrim()
  功能:去掉字符串前的空格.
  格式:ltrim(string) 
  参数:string 字符串. 
  例子: <% =ltrim (" this is a test!") 
  结果:this is a test! 
  18.函数Mid()
  功能:从字符串中截取字符串. 
  格式:mid(string,start [,length]) 
  参数:string字符串,start截取的起点,length要截取的长度.
  例子: 
  <% 
  strtest="this is a test, Today is Monday!" 
  response.write mid(strtest,17,5) 
  %> 
  结果:Today 
  19.函数minute() 
  功能:返回一数值, 表示分钟 
  格式:minute(time) 
  参数: time是时间变量 
  例子lt;% =minute(#12:23:34#) %> 
  结果:23 
  20.函数month() 
  功能:返回一数值, 表示月份 
  格式:month(time) 
  参数:time是日期变量 
  例子<% =month(#08/09/99) %> 
  结果:9 
  21.函数monthname() 
  功能:返回月份的字符串(名称). 
  格式:Monthname(date [,abb]) 
  参数: date是日期变量,abb=true时 则月份的缩写, 
  例子: 
  <% =monthname(#4/5/99#) %> 
  结果:April 
  22.函数Now() 
  功能:返回系统的当前时间和日期. 
  格式:now() 
  参数:无 
  例子: 
  <% =now() %> 
  结果: 05/10/00 8:45:32 pm 
  23.函数:replace() 
  功能:在字符串中查找,替代指定的字符串. 
  格式:replace(strtobesearched,strsearchfor,strreplacewith [,start[,count[,compare]]]) 
  参数:strtobesearched是字符串; strsearchfor是被查找的子字符串;strreplacewith 是用来替代的子字符串.start,count,compare 是任意选项. 
  例子: 
  <% 
  strtest="this is an apple." 
  response.write replace(strtest,"apple","orange") 
  %> 
  结果:this is an orange. 
  24.函数right() 
  功能:截取一个字符串的后部分 
  格式:right(string,length) 
  参数:string字符串,length截取的长度. 
  例子: 
  <% 
  strtest="this is a test!" 
  response.write right(strtest,3) 
  %> 
  结果:st! 
  25.函数rnd() 
  功能:返回一个随机数值 
  格式:rnd[(number)] 
  参数:number是任意数值. 
  例子: 
  <% 
  randomize() 
  response.write rnd() 
  %> 
  结果:0/1数值之一,无randomize(), 则不能产生随机数. 
  26.函数round() 
  功能:完整数值 
  格式:round(expression[,numright]) 
  参数:expression数字表达式;numright任意选项. 
  例子: 
  <% 
  i=12.33654 
  response.write round(i) 
  %> 
  结果: 12 
  27.函数rtrim() 
  功能:去掉字符串后的空格. 
  格式:rtrim(string) 
  参数:string 是字符串 
  例子: 
  <% 
  response.write rtrim("this is a test! ") 
  %> 
  结果:this is a test! 
  28.函数second() 
  功能:返回一个整数值. 
  格式:second(time) 
  参数:time是一个有效的时间表达式; 
  例子lt;% =second(# 12:28:30#) %> 
  结果:30 
  29.函数strReverse() 
  功能:返回与原字符串排列逆向的字符串. 
  格式:strreverse(string) 
  参数:string是字符串 
  例子<% =strreverse("this is a test!") 
  结果:!tset a si siht 
  30.函数time() 
  功能:返回当前系统的时间值. 
  格式:time() 
  参数:无 
  结果:9:58:28 Am 
  31.函数trim() 
  功能:删去字符串前,后的空格. 
  格式:trim(string) 
  参数:string 字符串. 
  例子: 
  <% 
  strtest=" this is a test! " 
  response.write trim(strtest) 
  %> 
  结果:this is a test! 
  32.函数UBound() 
  功能:返回一个数组的上界. 
  格式:Ubound(expression [,dimension]) 
  参数:expression 是数组表达式/数组变量,dimension 是任意项 
  例子: 
  <% 
  i = array("1","2","3") 
  response.write ubound(i) 
  %> 
  结果: 2 
  33.函数:UCase() 
  功能:将一字符类型变量的字符全部变换成大写字符. 
  格式:Ucase(string) 
  参数:string是字符串变量 
  例子: 
  <% 
  str="THIS is Lcase!" 
  response.write Lcase(str) 
  %> 
  结果:THIS IS LCASE! 
  34.函数Vartype() 
  功能:返回变量的常量代码(整数) 
  格式:Vartype(varname) 
  参数:varname是任何类型的变量名称. 
  例子: 
  <% 
  i=5 
  response.write vartype(i) 
  %> 
  结果:2 (2表示整数,须要参考asp常量代码.) 
  35.函数Weekday() 
  功能:返回一个整数,对应一周中的第几天. 
  格式:Weekday(date [,firstofweek]) 
  参数: date为日期变量,firstofweek为任选项. 
  例子: 
  <% 
  d= # 5/9/00 # 
  response.write weekday(d) %> 
  结果:3(3 表示是星期二) 
  36.函数weekdayname() 
  功能:返回字符串,对应星期几. 
  格式:weekdayname(weekday[,abb[,firstdayofweek]]) 
  参数:weekday为日期变量,abb,firstdayofweek为任选项. 
  例子: 
  <% 
  d = #8/4/99# 
  response.write weekdayname(d) 
  %> 
  结果: Wednesday 
  37.函数year() 
  功能:返回日期表达式所在的年份. 
  格式:year(date) 
  参数: date是有效的日期表达式 
  例子: 
  <% =year(#8/9/99#) %> 
  结果:1999 
  38.函数Mod()功能:取余数.
  例子:3 Mod 2 
  结果:1
相关词
blog日志日记理想商务中国电信中小企业企业信息化甩棍
伸缩棍phpjava编程无线通讯vbnet网站建设
软件使用电脑使用教程企业管理软件商务领航软件租赁网络代码cms
网站管理程序电话电信虚拟主机协议标准更多结果...