在IIS5(就是安装了Win2000)中自带了新的ADO 2.5版本尤其 增加了对XML技术的支持,并且带入了许多崭新的技术,这些技术可以 帮助我们实现以前必须要依靠组件或者其它技术才能够实现的功能。 我这里做一个简单的介绍让大家对这个新的Web组合有所了解。 从这可以看出,学习和掌握XML技术已经迫在眉睫了。欢迎大家到隔壁 的XML学习园地作客。。。 新技术之一: ADO中新增加了一个Record对象(别和RecordSet对象混淆了)。。。 它可以操纵服务器上的任何文件。。。 下面是它运用的事例:
<% Dim recRoot Dim rsFiles
Set recRoot = Server.CreateObject("ADODB.Record")
'注意打开的URL必须是运行IIS5中或者支持WebDAV服务, '至于什么是WebDAV请到隔壁去看看把 recRoot.open "", "URL=http://localhost/iis", adModeRead Response.Write "<UL>" & Chr(13) & Chr(10) TraverseTree recRoot Response.Write "</ul>" & Chr(13) & Chr(10) recRoot.Close set recRoot = Nothing
Sub TraverseTree(recNode)
Dim rsChildren Dim recChildNode Set recChildNode = Server.CreateObject("ADODB.Record")
Response.Write "<LI>" & recNode("RESOURCE_PARSENAME") & Chr(13) & Chr(10) Set rsChildren = recNode.GetChildren
If Not rsChildren.EOF Then Response.Write "<UL>" & Chr(13) & Chr(10) While Not rsChildren.EOF If rsChildren("RESOURCE_ISCOLLECTION") Then recChildNode.Open rsChildren TraverseTree recChildNode recChildNode.Close Else Response.Write "<LI>" & rsChildren("RESOURCE_PARSENAME") & Chr(13) & Chr(10) End If rsChildren.MoveNext Wend Response.Write "</UL>" & Chr(13) & Chr(10) End If rsChildren.Close Set rsChildren = Nothing Set recChildNode = Nothing End Sub %>
考虑到很多人目前没有安装Win2000,所以我把运行结果也给出来了, 大家可以看到代码运行的结果。。 。 注意要想得到正确的结果必须要让iis目录可以Directory Browing <UL> <LI>iis <UL> <LI>sdk <UL> <LI>admin <UL> <LI>mkwebsrv.vbs <LI>mkwebsrv.js <LI>metabackrest.vbs <LI>metabackrest.js <LI>metaback.vbs <LI>metaback.js <LI>logenum.vbs <LI>logenum.js </UL> <LI>asp <UL> <LI>applications <UL> <LI>Session_VBscript.asp <LI>Session_Jscript.asp <LI>Application_VBscript.asp <LI>Application_Jscript.asp </UL> <LI>components <UL> <LI>redirect.asp <LI>nts_iis.gif <LI>ie.gif <LI>clientcap.htm <LI>BrowserCap_VBscript.asp <LI>BrowserCap_Jscript.asp <LI>AdRotator_VBscript.asp <LI>AdRotator_Jscript.asp <LI>adrot.txt </UL> <LI>database <UL> <LI>Update_VBscript.asp <LI>Update_Jscript.asp <LI>StoredProcedures_VBscript.asp <LI>StoredProcedures_Jscript.asp <LI>SimpleQuery_VBscript.asp <LI>SimpleQuery_Jscript.asp <LI>MultiScrolling_VBscript.asp <LI>MultiScrolling_Jscript.asp <LI>LimitRows_VBscript.asp <LI>LimitRows_Jscript.asp <LI>Authors.mdb <LI>AddDelete_VBscript.asp <LI>AddDelete_Jscript.asp </UL> <LI>docs <UL> <LI>toolbar.asp <LI>sampfram.asp <LI>libcodebrws.inc <LI>ColorPicker.asp <LI>CodeBrws.asp </UL> <LI>interaction <UL> <LI>ServerVariables_VBscript.asp <LI>ServerVariables_Jscript.asp <LI>Redirect_VBscript.asp <LI>Redirect_Jscript.asp <LI>QueryString_VBscript.asp <LI>QueryString_Jscript.asp <LI>PopulateForm_VBscript.asp <LI>PopulateForm_Jscript.asp <LI>Pics_VBscript.asp <LI>Pics_Jscript.asp <LI>Logon_VBscript.asp <LI>Logon_Jscript.asp <LI>Form_VBscript.asp <LI>Form_Jscript.asp <LI>FileList.txt <LI>Expire_VBscript.asp <LI>Expire_Jscript.asp <LI>Cookie_VBscript.asp <LI>Cookie_Jscript.asp <LI>Clientscript_VBscript.asp <LI>Clientscript_Jscript.asp </UL> <LI>simple <UL> <LI>Variables_VBscript.asp <LI>Variables_Jscript.asp <LI>Looping_VBscript.asp <LI>Looping_Jscript.asp <LI>Includes_VBscript.asp <LI>Includes_Jscript.asp <LI>HeaderInfo.asp <LI>Functions_VBscript.asp <LI>Functions_Jscript.asp <LI>Conditional_VBscript.asp <LI>Conditional_Jscript.asp <LI>Arrays_VBscript.asp <LI>Arrays_Jscript.asp </UL> <LI>transactional <UL> <LI>SimpleTransaction_VBscript.asp <LI>SimpleTransaction_Jscript.asp <LI>FundTransfer_VBscript.asp </UL> </UL> </UL> <LI>homepage <UL> <LI>themes <UL> <LI>gunmetal <UL> <LI>setup.inc <LI>layout.inc <LI>layout.css <LI>gradient.gif </UL> <LI>journal <UL> <LI>setup.inc <LI>rip3.gif <LI>rip2_2.gif <LI>layout.inc <LI>layout.css </UL> <LI>looseleaf <UL> <LI>setup.inc <LI>layout.inc <LI>layout.css </UL> </UL> <LI>themes.inc <LI>theme.inc <LI>sub.inc <LI>signbook.asp <LI>myfiles.asp <LI>guestbk.asp <LI>global.asa <LI>file.gif <LI>default.asp <LI>bullet.gif </UL> <LI>global.asa </UL> </ul> |
dalongleng |
2006-02-14 01:51 |
这里要介绍第二个IIS5 + ADO 2.5的新特点: ADO中新增加了一个Stream对象。。。 顾名思义,Stream对象可以将服务器上的任何文件用流的方式打开来读写。。。 当然读取后的结果是写入一个Unicode流中。。 。
下面是它运用的事例: 这是它读文件的例子:
<% Dim stmData
Set stmData = Server.CreateObject ("ADODB.Stream")
stmData.Open "URL=http://localhost/ad/readme.txt", adModeRead, adOpenStreamFromURL
response.write stmData.ReadText
stmData.Close Set stmData = Nothing %>
这是它写文件的例子: <% Dim stmData Set stmData = Server.CreateObject ("ADODB.Stream") with stmData .Open "URL=http://localhost/ad/red.txt", adModeReadWrite, adOpenStreamFromURL
'把位置设置在流的最前面 .Position = 0 ' 将当前位置设置为流的结束位置 ' 从而删除了当前流中的内容 .SetEOS .WriteText "test"
Response.Write "文件已经更新。当前大小为" & .Size .Close End With
Set s = Nothing %> | |
dalongleng |
2006-02-14 01:51 |
在iis5中提供了两种服务器端网页重定向(或者说转向)的方法,一个是server.transfer方法, 另外一个是server.execute方法。
说它们是服务器端重定向,是因为在不同页面之间的转向是直接在服务器端完成的, 客户端只能看到结果,而不能看到转向的过程。 这同以往我们在iis4使用的response.redirect 方法是不同的。
以前, 当我们需要从一个页面转向到另外一个页面的时候,我们一般都会使用response对象的redirect方法, 比如, 在我们的某个需要用户验证的页面,当用户没有登陆的时候, 就转到用户登陆页面,简单的例子代码如下:
content.asp
<% if session("islogin")="" then response.redirect "login.asp" end if
'正常的内容
%>
那么,其实response.redirect方法, 是返回给浏览器一个http header状态为302的标记码,
http 1.0 302 object moved location url
这样,实际上是浏览器请求服务器的content.asp 文件,content.asp文件经过处理以后告诉浏览器,你先访问login.asp文件, 于是浏览器再向服务器发送一个到login.asp页面的请求。
所以, 实际上是转了一个弯。这样, 当客户端网络状况不是很好的情况下,两次请求会大大的降低应用程序的反应速度,甚至占用多余的带宽。
特别是,当需要传递参数的时候,也会有一些问题。而在iis5中, 提供了server.transfer和server.execute方法。
这两种方法,都是在服务器间完成转向的,因此可以减少客户端的网络带宽的占有,但是因为服务器端要保存程序1的一些状态,也会消耗一定的内存 。那么server.transfer和server.execute又有什么不同呢?
通过例子来说明吧,这里有两个文件,file1.asp和file2.asp
我们都是要在file1.asp里面转向到file2.asp
用tansfer方法时:
file1.asp
<% response.write "file 1 header<br>"
server.transfer "file2.asp" '到这里就停止执行下面的语句,转向了
response.write "file 1 footer<br>"
%>
file2.asp
<% response.write "慈勤强 2" %>
所有,当我们执行file1.asp文件时, 我们得到的结果是file 1 header
因为,当程序遇到transfer方法时,会停止执行后面的语句,转而执行转向的程序
当使用execute方法时:
file1.asp
<% response.write "file 1 header<br>"
server.execute "file2.asp" '到这里执行file2.asp,完成之后继续执行剩下的内容
response.write "file 1 footer<br>"
%>
file2.asp
<% response.write "file 2" %>
所有,当我们执行file1.asp文件时, 我们得到的结果是
file 1 header file2 file 1 footer
因为,当程序遇到execute方法时,会执行转向的程序,完成之后再继续执行第一页的剩下的内容。
其实execute方法就像我们经常写的子程序一样,类似于子程序调用。 | | |