其它的ASP常用组件 |
当你用 ASP 编写服务器端 利用程序时,必须 依附 ActiveX 组件来 壮大 Web 利用程序的 性能,譬如:你需求衔接数据库,对数据库进行在线操作等等 。 上两篇中作者给大家介绍了 AD Rotator、 Database Access 等组件的 使用 步骤,今日我们接着来看看其它的一些 ASP 常用组件 。 一、 Browser Capabilities 组件 家喻户晓,并不是全部阅读器都 支撑现今 Internet 技术的方方面面 。有一些 特点,某些阅读器 支撑而另一些阅读器却不 支撑,如 : ActiveX 控件、影像流、动态 HTML、 Flash 以及脚本程序等 。 使用 ASP 的 Browser Capabilities 组件,就 可以设计“智能”的 Web 页,以 合适阅读器性能的 格局出现内容 。 Browser Capabilities 组件 可以 缔造一个 BrowserType 对象,该对象提供带有客户端网络阅读器的 性能 注明的消费者脚本 。该组件之所以能 鉴别客户阅读器的版本等信息,重要是由于当客户阅读器向服务器发送页面 申请时,会自动发送一个 User Agent HTTP 题目,该 题目是一个申明阅读器及其版本的 ASCII 字符串 。 Browser Capabilities 组件将 User Agent 映射到在文件 Browscap.ini 中所注明的阅读器 , 并通过 BrowserType 对象的属性来 鉴别客户阅读器 。若该对象在 browscap.ini 文件中找不到与该 题目匹配的项,那么将 使用默许的阅读器属性 。若该对象既未找到匹配项且 browscap.ini 文件中也未指定默许的阅读器设置,则它将每个属性都设为字符串 "UNKNOWN" 。在默许状况下, browscap.ini 文件被 存放在 WINDOWSSYSTEMINERSRV( 假如是 95/98+PWS4) 或 NTSYSTEM32INERSRV( 假如是 NT) 目录中,你 可以自己编辑这个文本文件,以增加自己的属性或者依据最新公布的阅读器版本的更新文件来 批改该文件 。请看以下 checkCookie() 过程, 使用 BrowserCap 对象的 Cookie 属性来推断客户端阅读器是不是 支撑 Cookie,并返回信息 :
< % Sub checkCookie() Set BrowserCap=Server.CreateObject("MSWC.BrowserType") if BrowserCap.Cookie=True then response.write "你的阅读器 支撑 Cookie!" else response.write "对不起,你所 使用的阅读器不 支撑 Cookie!" end if end Sub %> 有关 Browser Capabilities 组件的 详尽信息,请参见动态网站设计十八般武艺 --ASP 篇 (2) 。 二、 File Access 组件假如你的网龄足够大的话,你 定然见过“恐龙时代”的 CGI 留言簿,那是 WEB 留言簿最早的雏形 。那时候在基于 Internet 的WEB 利用程序中衔接服务器后端数据库还十分 困苦, 因此留言簿中的历史信息并不是同如今一样存储在后端数据库中 。那么这些数据 毕竟是 保留在哪里的呢?答案便是“文本文件”, CGI 程序 可以将从客户端 接纳的信息写进一个 存放在服务器端的文本文件中,该文件 可以是 HTML 文件或 TXT 等文件,这样就使得程序员们 可以不通过同数据库衔接就 可以将客户信息 保留下来,然而写此类 CGI 程序甚是 繁琐,下面列出了一个此类程序的最 方便的样本 :
#!/usr/local/bin/perl # Perl Location one your server print "Content-type: text/plain "; if($ENV{'REQUEST_METHOD'}eq"POST"){ read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); }elsif($ENV{'REQUEST_METHOD'}eq"GET"){ $buffer=$ENV{'QUERY_STIRNG'}; } @pairs=split(/&/,$buffer); foreach $pair(@pairs){ ($name,$value)=split(/=/,$pair); $value='tr/+//; $value='s/%([a-f A-F 0-9][a-f A-f 0-9])/pack("C",hex($1))/eg; $FORM{$name}=$value;} $file_name="guestbook.txt";#File name #具体内容 open(FILE,">>$file_name")||die " 打开文件 舛误"; print FILE "记录 工夫":$date "; print FILE "姓名":$FORM{'name'}"; print FILE "单位":$FORM{'company'} "; print FILE "电话":$FORM{'phone'} print FILE "地址":$FORM{'address'} "; print FILE "邮编":$FORM{'zip'} print FILE "邮件地址":$FORM{'email'} "; print FILE "返回意见":$FORM{'content'} close (FILE) 大家 可以觉得到,与 ASP 相比此类 CGI 程序的可读性和易操作性都较差 。那么你 定然想问 ASP 是不是也能直接在服务器上写文件呢?答案固然是 确定的 。然而聪慧的朋友可能会想到,既然 ASP 同 WEB 数据库的衔接如此便捷,我们又何需再将客户信息写在文本文件中呢, ASP 的这个 性能岂不是画蛇添足?确实,关于那些我们常见的留言簿、 BBS 等 WEB 利用程序而言,无论是在程序的执行效率还是易用性上,我们都不可能再用写文本文件来 代替数据库,然而在某些 WEB 利用领域里写文本文件既是一种 标准也是一种 绝对数据库而较便捷的 步骤 。假如你对 NT 较 相熟的话,你 定然晓得 NT 存在十分 壮大的安全机制,它 可以将 几乎全部的服务器操作和衔接的信息自动 保留在一个后缀名为 .log 的文件中,其实这种技术也 彻底 可以被 使用在 WEB 上,用来记录一些的客户登陆信息 。下面的这段程序正是利用 ASP 读写文本文件的 特点,在一个 WEB BBS 程序中 缔造自动记录每个消费者发言记录的 性能 。
< % Set fs = CreateObject("Scripting.FileSystemObject") ForReading = 1 '以只读模式 打开文件 。不能对此文件进行写操作 。 ForAppending = 8 ' 打开文件并在文件末尾进行写操作 。 TristateUseDefault = -2 TristateTrue = -1 TristateFalse = 0
'-----------写入系统log开始-------- servermap=server.MapPath("bslog\") '映射系统物理路径 temp=servermap&"\"&year(date)&month(date)&"\" '猎取系统物理路径和 工夫,并以此作为log文件 存放的物理路径 if Not fs.FolderExists(temp) then fs.CreateFolder(temp) end if '检测是不是存在文件夹,不然自动 缔造 dim syslog dim tempname tempname=date syslog=temp&tempname&".log" '文件名为e:bslog月份月日.log li=user&"&"&Now&"&"&Request.ServerVariables("REMOTE_ADDR")&"&"&tempfile&"&"&letter&"&"&title 'log文件记录的 格局为:消费者名&发信 工夫&消费者ip&文件路径&信区& 函件 题目 if fs.FileExists(syslog) then Set ss = fs.OpenTextFile(syslog,ForAppending,true) else set ss = fs.CreateTextFile(syslog,ForWriting,false) end if '检测log文件是不是存在,假如存在则追加文件内容,反之则直接写文件 ss.WriteLine(li) ss.Close '-----------log文件写入 完毕--------- %> 假如你没有 彻底看懂上面的这段程序,就请听作者 渐渐道来 。 File Access 组件提供了可用来 拜访计算机文件系统的 步骤和属性 。我们 可以 使用 File Access 组件 缔造 FileSystemObject 对象,以上程序的第一句便是利用 File Access 组件 缔造了一个名为 fs 的对象实例 。在对象被 缔造后,你 可以通过它 拜访文件,该对象没有属性,它唯一的 意思便是 缔造、 打开或读写文本文件 。 FileSystemObject 对象有两种最常用的 步骤,一种用来 缔造文件,另一种是用来 打开并读写文本文件 。 CreateTextFile 步骤 获得你指定的文件名并 缔造该文件,它返回一个 TextStream 对象,你 可以用该对象在文件被 缔造后操作该文件, CreateTextFile 步骤的语法如下 : Set objTextStream=FileSystemObject.CreateTextFile(Filename,[Overwrite],[Unicode]) 下面作者给大家解释一下 CreateTextFile 步骤的参数 1、 Filename 包括文件路径名的字符串, 可以是文件的全路径名,包括驱动器名和目录名,或者也 可以只不过文件名,假如只包括文件名的话,文件将被 缔造在站点的根目录下 。 2、 Overwrite 布尔量,设置成 False 时 可以 预防 FileSystemObject 对象在 缔造一个新文件时删除已存在的文件,该参数是可选的,假如没有赋值系统默许为 true, 存在 雷同文件名的已有文件会被删掉 。 3、Unicode 可选参数 。布尔值指明是不是以 Unicode 或ASCII 文件 格局 缔造文件 。假如以 Unicode 文件 格局 缔造文件,则该值为 True;假如以 ASCII 文件 格局 缔造文件,则该值为 False 。假如省略此 部分,则 假如 缔造 ASCII 文件 。 在前面的程序中我们用 set ss=fs.CreateTextFile(syslog,ForWriting,false) 来在 log 文件不存在的状况下 缔造文件并对文件进行写操作,这里的“ForWriting” 示意写文件 。 与 CreateTextFile 步骤不同, OpenTextFile 步骤用来 获得你指定的文件名并 打开该文件,利用它所带的参数我们 可以对文件进行各种不同的操作,和 CreateTextFile 步骤一样, OpenTextFile 步骤返回一个 TextStream 对象,使得你 可以在文件被 打开后操作该文件 。 OpenTextFile 步骤的语法如下 : Set objTextStream=FileSystemObject.OpenTextFile(Filename,[Iomode],[Create],[Format]) 参数 注明如下 : 1、 Filename 必须的变量,同 CreateTextFile 的 filename 2、 Iomode 可选的常量,取值为下列两个常数之一 ForReading 或 ForAppending,假如 mode 为 1,文件以只读 模式 打开,假如为 8,则文件以追加的 模式 打开 。 3、Create 可选的布尔量,指定假如你想 打开的文件不存在是做什么操作,假如其值为 True,当文件不存在时就自动 缔造一个空的文件 。假如为 False,就会在文件没找到时产生一个出错信息,其默许值是 False, 提议将其设为 True,以幸免在 打开文件时 审查是不是出错 。 4、 Format 可选值, 可以 取舍三种 Tristate 值分别指定文件的 格局, -2、 -1、和 0 分别对应于系统缺省、 unicode 和 ASCII 。 在 打开或 缔造了文本文件后,就得到一个 TextStream 对象,该对象有一个光标,就好象是在字 解决程序中的光标一样,指出接下来要敲入的字符将出现的位置,它同时也指出你要读取的字符的位置 。不能通过 CreatObject 来 缔造一个 TextStream 对象,得到 TextStream 对象的唯一 步骤是如前所述的用 FileSystemObject 对象 打开一个存在的文本文件或者 缔造一个新的文件 。 下面列出了 TextStream 对象的属性和 步骤 TextStream.AtEndOfLine 只读布尔量,当光标在目前行的末尾时,其值为 true,反之则为 false TextStream.AtEndOfStream 只读布尔量,假如光标在流的末尾时,其值为 true,不然为 false TextStream.Column 只读的整数,统计从行首到目前光标位置中间的字符数 TextStream.Line 只读的整数,指明光标所在行在整个文件中的行号 TextStream.close() 关闭流以及对应的文本文件 TextStream.read(Num) 指定从光标的目前位置开始从文本文件中读取 定然数 目标字符 TextStream.readall() 将整个流读入一个字符串中 TextStream.readline() 将一整行的字符读入一个字符串中 TextStream.write(text) 将一个字符串写入流中 TextStream.writeline() 将一个文本串写入流中 TextStream.skip(Num) 在流中,将光标的位置移动 定然数 目标字符串长度 TextStream.skiplines() 在流中,将光标移动 定然数 目标行数 TextStream.writeblank 将 定然数 目标空行写入流中 lines(num) 相信大家现在已经 可以觉得到 ASP File Access 组件的 壮大 性能了,其实它远不只仅 可以写一些 log 文件,通过它你甚至 可以毫不 费劲的远程自动更新你的网站,你 惟独把固定 格局的文本文件 传递到远端的服务器上,通过 File Access 组件读取文件,并自动生成崭新 HTML 页面即可,而 毋庸再辛辛苦苦地一个一个地更新 HTML 文件 。假如你感兴趣,你 彻底 可以用 ASP 的File Access 组件写一个自己的全自动 HTML 生成器, 充足享受 保护网站的超前轻松感 。 |