桌面壁纸

查看完整版本: ASP知识讲座四、五

新水年华 2004-12-27 03:10

ASP知识讲座四、五

ASP知识讲座四


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"下,最新的版本可去[URL=http://www.asptracker.com/]http://www.asptracker.com/[/URL]或[URL=http://www.cyscape.com/browscap]http://www.cyscape.com/browscap[/URL]下载。

例: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 广告图片高度
* 分隔符
UploadFiles/2004517122224734.gif
[URL=http://www.canon.com.cn/]http://www.canon.com.cn/[/URL]
佳能
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一下搞定,是不是很方便?!不然你要是手工修改链接的话,不是太麻烦了几点吗?

现在你应该明白了,网上大量的免费计数器、免费留言板、免费聊天室、广告交换网等等……,其原理都不过如此,大可不必崇拜。


ASP知识讲座五:ASP组件(二)


在上一讲中,我们学习了如何创建组件,使用了浏览器能力组件、File Access组件、AD Rotator组件和Content Linking组件,也知道了Server对象的CreateObject方法、MapPath方法和HTMLEncode方法。本讲将继续组件的学习。

一、 Email组件:NTS Collaboration Data Objects
我们在网上经常看到,许多站点均提供在线发信功能(即用表单实现Question提交,Support或信息反馈等等)或者给访问者发送确认信息。这一功能对个人主页来说是很难达到的,因为需要主页提供商额外的支持(我个人主页上的在线写信是用CGI写的,与ASP无关),这里就其原理举一简单的例子:
特别说明:本讲座所举的所有例子均在Windows NT4.0 Server+IIS(Internet Information Server)4.0上调试,但其中大部分也适用于Windows9.x+PWS。不过要好好学用ASP,最好再装一个Windows NT与Windows95/98并存(没装过不要怕,很容易的,只要机器稍微好一点就行了,NT安装后能自动做成Win NT/Win9.x双启动)。


<% 'wuf30.asp
Dim Mail
'建立一个Email组件
Set Mail = Server.CreateObject("CDONTS.NewMail")
'发送Email
Mail.Send "From@intldept.com","To@intldept.com","Subject","Body"
Set Mail = Nothing
%>

这是一个最简单的例子,事实上,使用该组件,你可以发送纯文本格式邮件或者HTML超文本格式邮件,该组件也支持抄送(CC)和密件抄送(BCC),并且可以包含图片和附件,甚至还以可接收邮件,应该说功能还是比较强大的。但我个人并不是很欣赏,因为要使用该组件,必须安装Windows NT Server和IIS4.0的SMTP服务(微软风格),并且该组件不支持POP3协议。因此如果使用该组件不能正常发送邮件,你可以打开Internet Server Manager看看Default SMTP Site是否已启动(Start)以及一些相关的设置。不过,如果你是一个微软迷,可去我的主页([URL=http://wuf.bentium.net/)]http://wuf.bentium.net/)[/URL]下载该组件的例程wuf31.asp和sendmail.asp自己研究。

二、 使用第三方组件
到现在为止,我们所介绍的组件均包含在IIS4.0中,你可以直接使用这些组件。除此之外,你还可从Microsoft IIS Resource Kit光盘中获取以下两个组件(或者去[URL=http://www.microsoft.com/iis]http://www.microsoft.com/iis[/URL]碰碰运气看是否有下载):
l Page Counter组件:网页计数器
l Permission Checker组件:网页存取权限确认组件
IIS4.0内置组件的介绍到这里就告一段落了,但ASP组件的学习还要继续,一方面是因为IIS4.0内置的组件很少,另一方面已提供的这些组件或许功能并不很强大,适合你的需要。因此更大量的资源是网上现存的成百上千的第三方组件,它们有些是免费的,有些提供功能限制版或评估版,当然更多的要银子的(一个组件要三位数的$,有没有搞错!简直是拐弯抹角的"敲诈"),使用这些组件,足可以使你成为一个伪ASP高手,让你能快速、方便地做出功能强大的主页,不再有"巧妇难为无米之炊"的感叹。我们不妨通过几个例子来找一下这种感觉。

(一) 文件上传组件AspSmartUpload(免费)

先下载该组件:[URL=http://www.aspsmart.com/liblocal/download/EN/aspSmartUpload.zip]http://www.aspsmart.com/liblocal/download/EN/aspSmartUpload.zip[/URL],文件大小约100K(也可去我的站点下载)。下载解包后,共有三十多个文件,分别位于不同目录下,你可以参照其中的说明文件自己研究,这里仅举一个完整的例子说明如何使用第三方组件。

找到AspSmartUpload.dll和AspSmartUploadUtil.dll这两个文件,在Web服务器的命令提示符下分别用"regsvr32.exe aspsmartupload.dll"和"regsvr32.exe aspsmartuploadutil.dll"命令行来注册该组件(如果你是第一次使用Regsvr32.exe,可先将这两个DLL文件拷到Web服务器的"Winnt/System32"或"Windows/System"目录下),若注册成功,弹出的窗口中会有"succeeded"字样(注意:使用第三方组件前必须先注册,有的第三方组件采用安装方式,能自动注册,而更多的象这样,需要自己手工注册)。注册成功后,接下来就是写代码使用组件,该例由两个文件组成(注意测试时请勿使用中文文件名):
wuf32.htm - 上传文件的前端Web页面(表单)


<HTML>
<style type="text/css">
<!--
input { font-family: "宋体", "Times New Roman"; font-size: 9pt; line-height: 16pt}
-->
</style>

<BODY BGCOLOR="white">
上传文件的Web页面(可上传文件的个数自己定义,但文件名中不能含中文)
<HR>
<form METHOD="POST" ACTION="wuf34.asp" ENCTYPE="multipart/form-data">
<!-- TEXT -->
用户名?lt;input TYPE="TEXT" name="myText" value=""><br>

<!-- PASSWORD -->
口 令:<input TYPE="PASSWORD" name="myPASSWORD" value=""><br>

<!-- HIDDEN -->
<input TYPE="hidden" name="myHidden" value="hidden"><br>

<!-- 文件 -->
文件1:<INPUT TYPE="FILE" NAME="FILE1" SIZE="50"><BR>
文件2:<INPUT TYPE="FILE" NAME="FILE2" SIZE="50"><BR>
文件3:<INPUT TYPE="FILE" NAME="FILE3" SIZE="50"><BR>
文件4:<INPUT TYPE="FILE" NAME="FILE4" SIZE="50"><BR>
<INPUT TYPE="SUBMIT" value="Upload">
</form>
</BODY></HTML>
按"Upload"按钮,后台由文件wuf34.asp来处理(你也可下载更简单的wuf33.asp):
<HTML><BODY BGCOLOR="white">
文件上传结果 :
<HR>
<%
Dim mySmartUpload, item, value, file
' 先如下创建组件
Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload")

mySmartUpload.Upload

' 用 For Each 循环获取 From表单中每一项的值
For each item In mySmartUpload.form
For each value In mySmartUpload.form(item)
Response.Write(item & " = " & value & "<BR>")
Next
Next

Response.Write "<Hr>"
' 上传文件数据
' Response.Write("文件数目 =" & mySmartUpload.Files.Count &"<BR>")
Response.Write("总字节 = " & mySmartUpload.Files.TotalBytes &" bytes<Br><Br>")
Response.Write("文件清单: " & "<Br>")

' 对每一个文件 - 还有更简单的方法, 见wuf33.asp
For each file In mySmartUpload.Files
If not file.IsMissing Then
'以原来的文件名存于 C:\temp 下
file.SaveAs("c:\temp\" & file.FileName)
Response.Write(file.FileName & " (" & file.Size & "bytes)<BR>")
End If
Next
Set mySmartUpload = Nothing
%>
</BODY>
</HTML>

关于该组件更多、更详细的用法、功能(如限制上传文件的类型、尺寸,上传至数据库,下载文件或数据库字段等等),你可自己去看样例或研究洋文帮助。如果觉得看E文太累,也可下载一个全国产的File Upload组件,里面有中文的帮助和样例,还是不错的,下载地址:[URL=http://www.chinaasp.com/program/fileup.zip]http://www.chinaasp.com/program/fileup.zip[/URL]。

(二) 图形组件:Dundas Pie Chart(饼状图)
先听听组件提供者是怎么说的:"闪光的性能,足以让人晕厥的高质量的图形,强大、高速、无比的灵活性",哇塞,吹牛胜过韦小宝,是不是这样,看看结果之一:
有了这样的饼状图,你也可以象新浪网一样搞调查了,吹得这么好的东西却是免费的,你还等什么,快快驾上你的慢猫去拉下来:
(1)3DPieCSC.EXE:[URL=http://www.dundas.com/downloads/freeproducts/files/3DPieCSC.EXE]http://www.dundas.com/downloads/freeproducts/files/3DPieCSC.EXE[/URL]
(2)FPDocInst.exe:[URL=http://www.dundas.com/downloads/freeproducts/files/FPDocInst.exe]http://www.dundas.com/downloads/freeproducts/files/FPDocInst.exe[/URL]
3DPieCSC.EXE中包括该组件,后者是说明文档,都是安装文件,我将它安装在服务器的"C:\Inetpub\3dPieCSC"目录下,该组件自带两个复杂无比的样例程序以展示它炫丽无比的性能,较难搞明白。这里举一个简单实用的大众化例子:
wuf36.htm,通过<IMG>标签调用ASP文件:

<HTML><BODY>
<IMG src="wuf37.asp">
</BODY></HTML>
wuf37.asp,用来生成图形(与上面同理,请勿在代码中使用中文):
<%@ Language=VBScript %>
<% Option Explicit
Dim objPieChart
Set objPieChart = Server.CreateObject("Dundas.PieChartServer.1") '先创建组件

'设置工作目录
objPieChart.DirOutput = "C:\Inetpub\3dPieCSC\Sample\Chart\"
'设置模板文件所在目录
objPieChart.DirTemplate = "C:\Inetpub\3dPieCSC\Sample\Templates\"
'材质目录-你可以轻松的改变图形的材质和颜色
objPieChart.DirTexture = "C:\Inetpub\3dPieCSC\Sample\Textures\"

'选择一个模板文件, 该模板文件可自己编辑或修改
objPieChart.LoadTemplate "PieInTheSky.cuc"
'图形标题
objPieChart.title = "This is a Sample"

'增加各项目, 包括权重 标签 说明
objPieChart.AddData 40, "Item1:40%","China"
objPieChart.AddData 30, "Item2:30%","USA"
objPieChart.AddData 30, "Item3:30%","Other"

'输出结果为一图形, 可指定宽度和高度
objPieChart.SendJPEG 400,300

Set objPieChart = Nothing
%>

老实说,这个免费的东西还是不错的,就是它提供的例程太复杂了,让人不能一触即会。现在你可能要来一个举一反三,融会贯通,想怎样得到柱状图,的确是有这样的组件:ShotGraph,但是完全不需要搞这么复杂吗,你仅需准备一个柱状的图片(不会做!看到别人网页上有,另存一个不就搞定),利用HTML标记Weight、Height按比例拉伸和压缩就行了(<img src = bar.gif width = <%=变量%> height = 10>)。

此外,为了弥补本讲座开头负责任的简略,在此郑重向大家推荐两个Email组件:
(1) aspSmartMail: [URL=http://www.aspsmart.com/liblocal/download/EN/aspSmartMail.zip]http://www.aspsmart.com/liblocal/download/EN/aspSmartMail.zip[/URL],注意千万不要在代码中使用中文,不然你怎么也发不出一封信,详见例程wuf35.asp。
(2) W3 Jmail: [URL=http://download.dimac.net/jmail/jmail.exe]http://download.dimac.net/jmail/jmail.exe[/URL]。
(3) ChinaMail:[URL=http://wuf.bentium.net/]http://wuf.bentium.net/[/URL],本人写的全中文Email组件。

对于组件的感情,我个人是很复杂和沉重的,IIS4.0内置组件确实太少,然则网上E文的组件很多不支持中文,使用起来实在不够爽,那么为什么不使用国产的组件呢,你去国内最好的[URL=http://www.chinaasp.com/]http://www.chinaasp.com/[/URL]就知道了,所列组件寥寥,令人寒心,那么只剩一条路了,那就是自己写(可一般人自己写得了吗?这是一个疑问)。我倒是很同意ChinaASP的呼吁,大概意思就是国内没有任何软件公司公开发表ASP组件,在ASP方面的书虽成吨,但品味不高。的确,当初我应邀写这个讲座时,市面上关于ASP的书还很少,但现在,突然间出来很多,我还是建议你买外国人编的书,一来有光盘,二来确实舶来品总体上讲得好些,读起来象那么回事,也不死板。

最后给大家提供几个组件资源站点:
(1) [URL=http://www.serverobjects.com/]http://www.serverobjects.com/[/URL]
(2) [URL=http://www.15seconds.com/]http://www.15seconds.com/[/URL]
(3) [URL=http://www.activeserverpages.com/]http://www.activeserverpages.com/[/URL]
(4) [URL=http://www.softartisans.com/]http://www.softartisans.com/[/URL]  
  


zxb8980 2005-7-9 04:20

老师早安啊
页: [1]
查看完整版本: ASP知识讲座四、五