友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
富士康小说网 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

asp基础入门篇(DOC格式)-第8部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!


%》
《 ul》《 li》《 a href=〃《 %= Link。GetNthURL(〃nextlink。txt〃; I) %》〃》《 %= Link。GetNthDescription(〃nextlink。txt〃; I) %》《 /a》
《 % Next %》
《 /body》
《 /html》
     在以上代码中,我们先用 GetListCount 方法确定在文件 nextlink。txt 中有多少条项目,然后利用循环语句,并使用 GetNthURL、 GetNthDescription 方法逐一将存储在 nextlink。txt文件中的内容读出并显示给客户端浏览器。
    下面列出了 Content Linking 组件所有可使用的方法 GetListCount(file) 统计内容链接列表文件中链接的项目数。
   GetNextURL(file) 获取内容链接列表文件中所列的下一页的 URL。
   GetPreviousDescription(file) 获取内容链接列表文件中所列的上一页的说明行。
   GetListIndex(file) 获取内容链接列表文件中当前页的索引。
   GetNthDescription(file;index) 获取内容链接列表文件中所列的第 N 页的说明。
   GetPreviousUR(file) 获取内容链接列表文件中所列的上一页的 URL。
   GetNextDescription(file) 获取内容链接列表文件中所列的下一页的说明。
   GetNthURL(file;index) 获取内容链接列表文件中所列的第 N 页的说明。
      在我们创建了网站的总导航页面后,我们当然还希望在每一页中添加一个〃上一页〃、〃下一页〃的导航超链,下面我们就来看看如何实现导航超链。
     由于考虑到你的网站可能包含了上千或更多的页面,所以我们不可能在每一个页面中都编写实现导航超链的 ASP 代码。因此,我们必须利用前几篇中所学到的服务器端包容 SSI,这样就避免了大量的重复作业,请看下例 :
   《 !……#include file=〃nextprev。inc〃……》
     只要将这端代码放在每个页面中即可。 nextprev。inc 文件的内容如下 :
《 %
Set Link = Server。CreateObject(〃MSWC。NextLink〃)
count = Link。GetListCount(〃nextlink。txt〃)
current = link。GetListIndex(〃nextlink。txt〃)
If current 》1 Then
%》
《 a href=〃《 %= Link。GetPreviousURL(〃nextlink。txt〃) %》〃》上一页 《 /a》
《 %
End If
If current 《 count Then
%》
《 a href=〃《 %= Link。GetNextURL(〃nextlink。txt〃) %》〃》下一页 《 /a》
《 % End If %》
     今天的学习又到此结束了,在这里我要再次感谢所有关心我的文章的朋友们,你们的来信给了
我很大的鼓舞,不过请大家不要再称我为〃老师〃,其实我也和你们一样是在不断的学习和摸索中,
有问题我们可以一起探讨,我的文章中肯定还存在很多不足或漏洞,也希望大家发现后能及时向我
提出。由于近来 ASP 已经在国内的网站中广泛运用起来,所以应朋友们的要求,在国内 ASP 高手
飞鸟的热情帮助下,我决定写一些 ASP 应用实例作为现在这篇文章的姊妹篇,这样也就可以为大家
提供一些真正实用的东西了,敬请关注。
ASP基础教程:其它的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
%》
       二、 File Access 组件如果你的网龄足够大的话,你一定见过〃恐龙时代〃的 CGI 留言簿,那是 WEB 留言簿最早的雏形。那时候在基于 Internet 的 WEB 应用程序中连接服务器后端数据库还十分困难,因此留言簿中的历史信息并不是同如今一样存储在后端数据库中。那么这些数据究竟是保存在哪里的呢?答案就是〃文本文件〃, CGI 程序可以将从客户端接收的信息写进一个存放在服务器端的文本文件中,该文件可以是 HTML 文件或 TXT 等文件,这样就使得程序员们可以不通过同数据库连接就可以将客户信息保存下来,但是写此类 CGI 程序甚是烦琐,下面列出了一个此类程序的最简单的样本 :
#!/usr/local/bin/perl
# Perl Location one your server
print 〃Content…type: text/plainnn〃;
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 nn〃;
print FILE 〃姓名〃:FORM{'name'}〃;
print FILE 〃单位〃:FORM{'pany'}n〃;
print FILE 〃电话〃:FORM{'phone'}
print FILE 〃地址〃:FORM{'address'}n〃;
print FILE 〃邮编〃:FORM{'zip'}
print FILE 〃邮件地址〃:FORM{'email'}n〃;
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(〃bbslog”)
'映射系统物理路径
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:bbslog月份月日。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 生成器,充分享受维护网站的超前轻松感。
ASP基础教程:ADO存取数据库时如何分页显示
《动态网站设计十八般武艺 ……ASP 篇》一文从第一期至今已和朋友们一起度过了大半个年头,相信通过在这一段时间中的学习、实践到再学习、再实践,大家已经能够熟练运用 ASP 的内建对象、 ActiveX 组件去编写一些基本的 ASP 应用程序。从我收到的朋友们的来信中可以明显的感觉到,大家的 ASP 功力正不断地提升。最近很多朋友来信希望我写一些 ASP 在现实运用中的实例。因此,从本期开始我决定将《动态网站设计十八般武艺 ……ASP 篇》的定位从介绍和学习 ASP 基础知识转向到 ASP 实际运行的探讨和深化。应朋友们的要求,在本期中我将给大家着重谈一谈〃ADO 存取数据库时如何分页显示〃的问题。
       什么是 ADO 存取数据库时的分页显示?如果你使用过目前众多网站上的电子公告板程序的话,那你应该会知道电子公告板程序为了提高页面的读取速度,一般不会将所有的帖子全部在一页中罗列出来,而是将其分成多页显示,每页显示一定数目的帖子数,譬如 20 条。这就是数据库查询的分页显示,如果你还不明白,去看看 yahoo 等搜索引擎的查询结果就会明白了。
      那么究竟如何才能做到将数据库的查询结果分页显示呢?其实方法有很多,但主要有两种:
一、将数据库中所有符合查询条件的记录一次性的都读入 recordset 中,存放在内存中,然后通过 ADO Recordset 对象所提供的几个专门支持分页处理的属性: PageSize( 页大小 )、 PageCount( 页数目 ) 以及 AbsolutePage( 绝对页 ) 来管理分页处理。
二、根据客户的指示,每次分别从符合查询条件的记录中将规定数目的记录数读取出来并显示。
      两者的主要差别在于前者是一次性将所有记录都读入内存然后再根据指示来依次做判断分析从而达到分页显示的效果,而后者是先根据指示做出判断并将规定数目的符合查询条件的记录读入内存,从而直接达到分页显示的功能。
      我们可以很明显的感觉到,当数据库中的记录数达到上万或更多时,第一种方法的执行效率将明显低于第二种方法,因为当每一个客户查询页面时都要将所有符合条件的记录存放在服务器内存中,然后在进行分页等处理,如果同时有超过 100 个的客户在线查询,那么 ASP 应用程序的执行效率将大受影响。但是,当服务器上数据库的记录数以及同时在线的人数并不是很多时,两者在执行效率上是相差无几的,此时一般就采用第一种方法,因为第一种方法的 ASP 程序编写相对第二种方法要简单明了得多。
      在这里作者就以我们常见的 ASP BBS 程序为例,来给大家分析一下如何在 BBS 程序里实现分页显示功能,由于我们一般使用的 BBS 程序的数据库记录数和同时访问的人数都不会太多,所以以下程序实例是使用的先前所介绍的第一种分页显示方法。
      进行 ADO 存取数据库时的分页显示,其实就是对 Recordset 的记录进行操作。所以我们首先必须了解 Reordset 对象的属性和方法:
BOF 属性:目前指标指到 RecordSet 的第一笔。
EOF 属性:目前指标指到 RecordSet 的最后一笔。
Move 方法:移动指标到 RecordSet 中的某一条记录。
AbsolutePage 属性:设定当前记录的位置是位于哪一页 AbsolutePosition 属性:目前指标在 RecordSet 中的位置。
PageCount 属性:显示 Recordset 对象包括多少〃页〃的数据。
PageSize 属性:显示 Recordset 对象每一页显示的记录数。
RecordCount 属性:显示 Recordset 对象记录的总数。
下面让我们来详细认识一下这些重要的属性和方法
     一、 BOF 与 EOF 属性
     通常我们在 ASP 程序中编写代码来检验 BOF 与 EOF 属性,从而得知目前指标所指向的 RecordSet 的位置,使用 BOF 与 EOF 属性,可以得知一个 Recordset 对象是否包含有记录或者得知移动记录行是否已经超出该 Recordset 对象的范围。
   如:
《 % if not rs。eof then 。。。 %》
《 % if not (rs。bof and rs。eof) %》
    若当前记录的位置是在一个 Recordset 对象第一行记录之前时, BOF 属性返回 true,反之则返回 false。
    若当前记录的位置是在一个 Recordset 对象最后一行记录之后时, EOF 属性返回 true,反之则返回 false。
    BOF 与 EOF 都为 False:表示指标位于 RecordSet 的当中。
     BOF 为 True:目前指标指到 RecordSet 的第一笔记录。 EOF 为 True:目前指标指到 RecordSet 的最后一笔记录。
     BOF 与 EOF 都为 True:在 RecordSet 里没有任何记录。
     二、 Move 方法
您可以用 Move 方法移动指标到 RecordSet 中的某一笔记录,语法如下:
    rs。Move NumRecords;Start
     这里的〃rs〃为一个对象变量,表示一个想要移动当当前记录位置的 Recordset 对象;〃NumRecords〃是一个正负数运算式,设定当前记录位置的移动数目;〃start〃是一个可选的项目,用来指定记录起始的标签。
      所有的 Recordset 对象都支持 Move 方法,
返回目录 上一页 下一页 回到顶部 11 12
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!