ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 动态网站设计十八般武艺——ASP篇(十五)(转)

动态网站设计十八般武艺——ASP篇(十五)(转)

原创 Linux操作系统 作者:jcszjswkzhou 时间:2019-05-11 16:00:05 0 删除 编辑
动态网站设计十八般武艺——ASP篇(十五)

上两篇中作者给大家介绍了AD Rotator、Database Access等组件的使用方法,今天我们接着来看看其它的一些ASP常用组件。

  一、Browser Capabilities组件众所周知,并不是所有浏览器都支持现今Internet技术的方方面面。有一些特性,某些浏览器支持而另一些浏览器却不支持,如:ActiveX控件、影像流、动态HTML、Flash以及脚本程序等。使用ASP的Browser Capabilities组件,就能够设计“智能”的Web页,以适合浏览器性能的格式呈现内容。Browser Capabilities组件能够创建一个BrowserType对象,该对象提供带有客户端网络浏览器的功能说明的用户脚本。该组件之所以能识别客户浏览器的版本等信息,主要是因为当客户浏览器向服务器发送页面请求时,会自动发送一个UserAgentHTTP标题,该标题是一个声明浏览器及其版本的ASCII字符串。Browser Capabilities组件将UserAgent映射到在文件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")
For Reading=1
'以只读模式打开文件。不能对此文件进行写操作。
For Appending=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生成器,充分享受维护网站的超前轻松感。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-124358/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-08-29

  • 博文量
    2772
  • 访问量
    2038612