ASP知识讲座四


Posted in PHP onOctober 09, 2006

ASP内置组件

前三讲中,我们主要介绍了ASP提供的四大内置对象:
l Response对象:向浏览器发送信息。
l Request对象:访问从浏览器发送到服务器的信息(如获取表单数据)。
l Session对象:存储、读取特定用户对话信息。
l Application对象:存储、读取所有用户共享的应用程序信息。
此外还有Server对象和ObjectContext对象我们将在以后的实例中学习(提示:其实不经意之间你已经可以利用所学知识编写网上聊天室了)。本讲的内容是使用ASP的ActiveX Server Components(组件)。

一、 Browser Capabilities Component(浏览器能力组件): 
我们知道,不同的浏览器也许支持不同的功能,如有些浏览器支持框架,有些不支持。利用这个组件,可以检查浏览器的能力,使你的网页争对不同的浏览器显示不同的页面(如对不支持Frame的浏览器显示不含Frame的网页)。该组件的使用很简单,需注意的是,要正确使用该组件,必须保证Browscap.ini文件是最新的(其实每一个浏览器及其特性都列在这个文件中,自己打开看看就明白了),否则结果可能相去甚远,如Win98第二版所带的IE5.0,在下例中显示为Netscape。这个文件一般位于Web服务器的"\Winnt\System32\InetSrv"下,最新的版本可去http://www.asptracker.com/或http://www.cyscape.com/browscap下载。
例:wuf22.asp
<html>
<BODY>
'注意:组件的使用与对象类似,但是组件在使用前必须先创建,而使用内置对象前不必创建。
<%Set BrowsCap=Server.CreateObject("MSWC.BrowserType")%>
请稍候......
<P>
<TABLE BORDER=1 CELLPADDING=10>
<TR><TD>浏览器类型</TD><TD><%=BrowsCap.Browser%></TD></TR>
<TR><TD>浏览器版本</TD><TD><%=BrowsCap.version%></TD></TR>
<TR><TD>是否支持表格</TD><TD><%=BrowsCap.tables%></TD></TR>
<TR><TD>是否支持ActiveX控件</TD><TD><%=BrowsCap.activexcontrols%></TD></TR>
<TR><TD>是否支持JavaApplets</TD><TD><%=BrowsCap.javaapplets%></TD></TR>
<TR><TD>是否支持JavaScript</TD><TD><%=BrowsCap.javascript%></TD></TR>
<TR><TD>是否支持Cookies</TD><TD><%=BrowsCap.Cookies%></TD></TR>
<TR><TD>是否支持Frames</TD><TD><%=BrowsCap.Frames%></TD></TR>
<TR><TD>操作系统</TD><TD><%=BrowsCap.Platform%></TD></TR>
<TR><TD>是否支持VBScript</TD><TD><%=BrowsCap.vbscript%></TD></TR>
</TABLE>
<%Set BrowsCap = Nothing%>
</BODY>
</HTML>
注意:在本例中我们也接触了Server对象的CreateObject方法,Server.CreateObject用于创建已经注册到服务器上的ActiveX组件(说明:还有其他方法可以创建组件)。不过别忘了用"Set 对象 = Nothing"来及时释放资源,这应该成为一个习惯。

二、 File Access组件
File Access组件由FileSystemObject对象和TextStream对象组成,使用FileSystemObject对象,可以建立、检索、删除目录及文件,而TextStream对象则提供读写文件的功能。
实例wuf23.asp。强调:只有通过实践才能加深理解,实践和比较程序运行结果是快速掌握编程技巧的最好方法。
<%@ Language=VBScript %>
<% Option Explicit
' 注意绝对路径: C:\Inetpub\home\asp\wuf23.asp 主页路径: C:\Inetpub\home
Dim Path, File, FSO, CTF, Str, StrHTML, StrNoHTML

'使用 CreateObject 方法创建 FileSystemObject 对象 FSO
Set FSO = Server.CreateObject("Scripting.FileSystemObject") 

Path = Server.MapPath("test") '返回test的物理目录(绝对路径)
'就本例而言, 下面这句与上面这句返回的Path完全一样
'Path = Server.MapPath("\asp\test\") 
Response.Write Path & "<Br>"

If FSO.FolderExists(Path) = false then '判断该文件夹是否存在
FSO.CreateFolder(Path) '新建文件夹
End If 

File = Path & "\asptest.txt"
' 写文件操作
If FSO.FileExists(File) = True Then '判断该文件是否存在
'建立 TextStream 对象 CTF
Set CTF = FSO.OpenTextFile(File, 8, False, 0) '打开文件, 详见说明
Else
Set CTF = FSO.CreateTextFile(File,False, False) '新建文件
End If
CTF.Write "<P>第一个字符串; " '写字符串
CTF.WriteLine "第二个字符串; " '写字符串, 并加上一个换行符
CTF.Write "第三个字符串; "
CTF.Close '注意要关闭文件 

' 读文件操作
Set CTF = FSO.OpenTextFile(File, 1,,0)
Do While CTF.AtEndOfStream <> True '判别是否文件结尾(循环语句)
Str = CTF.ReadLine '(每次)读取一行
StrNoHTML = StrNoHTML & Str & "<BR>" & VbCrLf 
StrHTML = StrHTML & Server.HTMLEncode(Str) & "<BR>" & VbCrLf
Loop
Response.Write StrNoHTML
Response.Write StrHTML

CTF.Close
Set CTF = Nothing '释放对象
Set FSO = Nothing
%>
CTF = FSO.OpenTextFile(File, 8, False, 0),括号内第一个参数为文件名;第二个参数为8,表示在原文件后追加内容,若为1表示只读,为2则会重写原文件;第三个参数false表示,若指定文件不存在,也不新建文件,若为True,表示指定文件不存在,则新建该文件;第四个参数0表示以ASCII文件格式打开,若为-2,则表示以原来的格式打开。
CTF = FSO.CreateTextFile(File,False, False),第二个参数false表示不覆盖已有文件,若为True,则表示覆盖(OverWrite)已有文件;第三个参数为False表示文件格式为ASCII,为True表示文件格式为Unicode。
Server对象的MapPath方法将指定的虚拟路径转换为真实的文件路径。MapPath将"/"和"\"字符视为相同。
Server对象的HTMLEncode方法允许你对特定的字符串进行HTML编码,或者说使浏览器中可以正确显示特定的字符。上例中,若未编码,则"<P>"显示不出来,而是被浏览器作为HTML标记,你可以对比一下运行结果。
实际上,File Access组件对文件、文件夹和驱动器的操作还是比较强大的,也提供了较多的方法,如果需要用到这方面的知识,别忘了使用它。
另外,到现在为止,写一个网页计数器已经是小菜一碟了吧,难怪那么多的网页提供免费计数器。怎么样?自己写一个图形计数器试试看,想怎么作弊就怎么作弊,完全自己说了算,爽呆!(小秘密:我的主页上有实例wuf24.asp)

三、 AD Rotator(广告翻转组件)
现在上网,恐怕最讨厌的是别人主页上的广告条,最喜欢的是自己主页上的广告条,广告条如同垃圾邮件一样,比比皆是,防不胜防。你也可以自己动手制造这样的垃圾,ASP的AD Rotator组件就可使每次打开或者重新加载网页时,随机的显示广告。这个例子包括三部分:
例程wuf25.asp
<%@ Language=VBScript %>
<% Option Explicit
Dim adr
'创建 AD Rotator 对象
Set adr = Server.CreateObject("MSWC.AdRotator")
adr.Border = 2 '指定图形文件的边框大小
adr.Clickable = True '指示显示的图片是否是一个超链接
adr.TargetFrame = "_blank" '设置超链接是否要指定Frame名称,如: _TOP _NEW _PARENT
'获取将要显示的图片及超链接设置 - 在文件 AdrSet.txt 中设置
Response.Write adr.GetAdvertisement("AdrSet.txt")
%>
AdrSet.txt内容(后面为注释,不是这个文件的内容):
REDIRECT wuf26.asp 点击广告后,转由wuf26.asp来处理
WIDTH 468 广告图片宽度
HEIGHT 60 广告图片高度
* 分隔符
http://www.soyou.com/prog/ad/468x60_1.gif 广告图片所在位置,也可为本地图形文件
http://www.163.com/ 指向链接,若没有超链接,写入一个"-"
网易 文字说明
20 显示该广告的相对权重,即显示频率
http://fp.cache.imgis.com/images/Ad173962St1Sz1Sq1Id2.gif
http://www.sina.com.cn/
新浪网
30
http://61.139.77.73/images/canon.gif 也可以使用本地图片,如../images/flag.gif
http://www.canon.com.cn/
佳能
50
本例中一共有三个图片(图片大小468X60)及链接,每个链接的描述占四行,实际使用时,你可如法炮制,增加更多的图片。
<% 'wuf26.asp
URL = Request.QueryString("url")
Response.Redirect(URL) 
%>
wuf26.asp是一个最简单的处理程序,你可根据实际需要在这里加入更多的代码。
运行一下,原来这个组件的使用也很简单,你要做的就是得到自己的AdrSet.txt文件。利用这个组件,你甚至可以设计一个现在已非常时髦的广告交换主页。

四、 Content Linking组件
显然这个组件与链接有关系,如果想马上知道这个组件的具体用途,恐怕还操之过急,不妨先引用一个经典的例子:假设在网上阅读一本书,你对以下这些链接一定不会陌生:第1章、第2章、…、上一章、下一章(或前一页、后一页)等等。我们现在要做的就是如何在这些链接之间方便快速地设置跳转。
首先建一个链接列表文本文件,如urllist.txt
wuf23.asp 第1章:文件操作(File Access组件)
wuf28.asp 第2章:Content Linking组件使用示例
wuf22.asp 第3章:浏览器能力组件
链接url地址和描述之间用 Tab 键分隔。下面wuf27.asp用来列出urllist.txt中的所有链接。
<% @LANGUAGE = VBScript %>
<% Option Explicit %>
<html><head><title>Content Linking组件使用</title></head>
<body> 
<h2>目录列表: 注意核心链接是第2章, 你一定要点击它</h2>
<ul>
<%
Dim NextLink, Count
'建立 Content Linking 组件
Set NextLink = Server.CreateObject("MSWC.NextLink") 

'获取文件 urllist.txt 中链接数目
Count = NextLink.GetListCount("urllist.txt")

Dim url, Dscr, I
For I = 1 To Count
url = NextLink.GetNthURL ("urllist.txt", I) '取得超链接
Dscr = NextLink.GetNthDescription ("urllist.txt", I) '取得文字描述
Response.Write "<li><a href = """ & url & """>" & Dscr & "</a>" & vbcrlf
Next
%> 
</ul></body></html>
然后,以wuf28.asp为例说明如何自动实现上一章和下一章跳转。
<% @LANGUAGE = VBScript %>
<% Option Explicit %>
<html><head><title>这个链接要注意</title></head>
<body> 

<p>这里是第 2 章的正文............</p>

<% '每个文件都包含下面这句, 就实现了自动链接%>
<!--#include file="wuf29.asp"-->
</body></html>
这里最后一句加上去就可以实现自动跳转,核心在wuf29.asp中。
<%
Dim NextLink, rank
Set NextLink = Server.CreateObject ("MSWC.NextLink")
'当前的链接在 urllist.txt 中位于第几个
rank = NextLink.GetListIndex ("urllist.txt")
Response.Write "<hr>"

If (rank > 1) Then 'rank = 1 不存在前一页
Response.Write "|<a href=""" & NextLink.GetPreviousURL("urllist.txt") & """>上一章</a>|"
End If 

If (rank < NextLink.GetListCount("urllist.txt")) Then 'rank在最后, 则没有下一页
Response.Write "|<a href=""" & NextLink.GetNextURL("urllist.txt") & """>下一章</a>|"
End If
%>
运行这个例子后,你马上能真正理解这个组件的作用,简而言之,就是不需要在每页都写一个"上一章"、"下一章",完全通过wuf29.asp一下搞定,是不是很方便?!不然你要是手工修改链接的话,不是太麻烦了几点吗?
现在你应该明白了,网上大量的免费计数器、免费留言板、免费聊天室、广告交换网等等……,其原理都不过如此,大可不必崇拜。

PHP 相关文章推荐
实时抓取YAHOO股票报价的代码
Oct 09 PHP
用PHP读取和编写XML DOM的实现代码
Feb 03 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
第四章 php数学运算
Dec 30 PHP
优化PHP程序的方法小结
Feb 23 PHP
PHP编译安装时常见错误解决办法
May 28 PHP
PHP7新特性foreach 修改示例介绍
Aug 26 PHP
php 数组处理函数extract详解及实例代码
Nov 23 PHP
Yii2 加载css、js 载静态资源的方法
Mar 10 PHP
PHP 使用二进制保存用户状态的实例
Jan 29 PHP
PhpStorm本地断点调试的方法步骤
May 21 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
May 02 PHP
php.ini中文版
Oct 09 #PHP
用Apache反向代理设置对外的WWW和文件服务器
Oct 09 #PHP
Mysql的常用命令
Oct 09 #PHP
提升PHP执行速度全攻略
Oct 09 #PHP
Apache设置虚拟WEB
Oct 09 #PHP
PHP&amp;MYSQL服务器配置说明
Oct 09 #PHP
国内php原创论坛
Oct 09 #PHP
You might like
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
PHP base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
discuz目录文件资料汇总
2014/12/30 PHP
php删除数组中重复元素的方法
2015/12/22 PHP
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
2016/10/10 Javascript
JS实现直接运行html代码的方法
2017/03/13 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
2018/03/01 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
JavaScript实现省份城市的三级联动
2020/02/11 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
python中使用序列的方法
2015/08/03 Python
详解如何减少python内存的消耗
2019/08/09 Python
Django app配置多个数据库代码实例
2019/12/17 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
2014年校务公开工作总结
2014/12/18 职场文书
新教师个人总结
2015/02/06 职场文书
入党后的感想
2015/08/10 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
Memcached介绍及php-memcache扩展安装
2021/04/01 PHP
Java实现注册登录跳转
2022/06/16 Java/Android