ASP教程之使用ASP+XML打造本性化留言本
无法实现跨操作系统的应用。当然这也是微软的理由之一,只有这样才能发挥ASP最佳的能力。可是我却认为正是Windows限制了ASP,ASP的概念本就是为一个能让系统运行于一个大的多样化环境而设计的;asp+|xml 1、读者指引读者指引匡助你把握本文的梗概。以避免你看了泰半才分明这编文章不合适你,给你形成视觉净化。
假如你正在用ASP+XML写一些程序,大概你正在学XML那就值得一看。
浏览本文须具有的常识,对ASP有基础的懂得,对XML和DOM有基础懂得,假如你不懂得那末你经由过程进修本文基础上可以撑握ASP+XML和DOM的使用,并能依据本文范写出自已更初级的ASP+XML程序。
2、基础头脑
本文头脑是基于用ASP和DOM来读取和存储XML数据,并使用XML数据来存储留言信息,到达同用数据库存储数据的功效。
3、XML留言本的上风
也许你会问用ASP+TXT文本也能够到达不必数据库实上留言的功效,不错的确可以做到,并且网上也有良多如许的留言本收费下载,但这里我要讲一下ASP+XML的优胜性。
1、XML+ASP比ASP+TXT速率要快。大概你也发明当TXT文件很少时速率出奇的快,可是跟着留言信息的增添TXT文本变年夜,速率却又是出奇的慢这就是ASP+TXT的缺点。固然我不克不及说ASP+XML就必定是出奇的快,可是比起ASP+TXT来讲是快了很多,固然跟着留言信息的增添XML文本增年夜速率也下落很快,可是比起TXT来讲就仍是好了很多(这一点能够从WAS测试证实读者能够自行测试),固然ASP+XML比不上数据库,由于数据库对查询做了出格的优化,而XML只是纯文本,在ASP创建对像是要把XML数据全体读进内存中,假如数据量年夜的话不可思议速率会慢上去。那你大概会问那我甚么时分用干系数据库存储数据,又甚么时分用XML存储数据呢?我这里也特地提一下,就是当数据对照庞大无规率时用XML数据对照符合,另有就是你盘算这些数据要在分歧的操纵体系上读取使用时那就是XML大显神通的时分了。假如你是一般的数据那末不到关头时候或不撑持数据库的空间时仍是不要用XML文件来存储数据为好。
2、XML数据的易读取性,TXT文本是对照难操纵的,我们必需一行一行的读取判别,并且良多功效没法实上,只能体例对照复杂的留言本,而XML数据则分歧了,使用DOM能够容易的会见每个节点,而不是TXT那些烦人的Readline()Witeline()了,我们能够随便的到场删除更新某一个我们感乐趣的节点,使用ASP大概JS大概数据岛都能够轻松实上这一点,固然我这里为发思索兼容性,用了ASP来读取XML数据,而没有效数据岛来读取节点数据(由于只要IE5以上版本才撑持数据岛手艺)而用ASP来实上就不存在这些问了由于客户失掉的是HTML文件。
3、XML数据夸操纵体系性,只需我们把这些数据存储为XML那末这些数据就可以被应何基它言语或体系所辨认,而不必做应何修改。TXT明显不具有这些功能。比方我们在网上的留言信息能够间接被被转换成wap格局在手机上显现。
4、创建存储留言信息的XML文件(List.xml)
我们这里不盘算利用DTD,由于我们这是我们自已体例并测试经由过程的XML数据,以是不必要DTD来考证(假如你对此感乐趣固然能够加一个这不影响程序的运转)。如今我们来看看创建一个留言本的基础要素
0、留言ID号--界说为<id>
1、用户名我们--界说为<username>
2、来自那边们--界说为<fromwhere>
3、留言工夫定--义为<Posttime>
4、用户主页定--义为<homepage>
5、用户的信箱--界说为<email>
6、留言内容定--义为<text>
固然以上不是必需的读者能够自行定名并加减相干标签,把它们组合起来就失掉List.xml的文件了
<?xmlversion="1.0"encoding="gb2312"?>
<site>
<NewList>
<list>
<id>1</id>
<username>苛子</username>
<fromwhere>中国广州</fromwhere>
<Posttime>01-4-2318:26:56</Posttime>
<homepage>http://page2000.xiloo.com</homepage>
<email>lucaihui@cmmail.com</email>
<text>这是我的第一个XML文件</text>
</list>
</NewList>
</site>
注重:必需加上encoding="gb2312"不然会报错为不法字符,由于XML默许不撑持中文。<site>为根节点<NewList><ist>等为子节点。对这个文件的意义我就未几说了人人也应当看的分明了。接上去就是我们怎样来显现它了。
<P> 5、创建显现XML数据的ASP文件(index.asp)
这个文件要完成的功效就是读取并显现XML数据,起首创立一个XML对像然后把XML读进内存中,使用DOM分别出我们所要的数据。
<%
strSourceFile=Server.MapPath("/")&"List.xml"
猎取XML文件的路径这里依据你的假造目次分歧而分歧
SetobjXML=Server.CreateObject("Microsoft.FreeThreadedXMLDOM")
以自在线程创立一个XML对像
objXML.load(strSourceFile)把XML文件读进内存
SetobjRootsite=objXML.documentElement.selectSingleNode("NewList")
拔取NewList节点
%>
<html>
<head>
<title>留言本</title>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
<styletype="text/css">
<!--
td{font-family:"宋体";font-size:9pt;text-decoration:none}
a{font-family:"宋体";font-size:9pt;color:#0066CC;text-decoration:none}
a:hover{color:#FF6600;text-decoration:underline}
-->
</style>
</head><bodybgcolor="#0099CC"text="#000000">
<tablewidth="80%"border="0"cellspacing="1"cellpadding="4"align="center"bgcolor="#CCCCCC">
<trbgcolor="#000000">
<tdcolspan="2"><fontcolor="#FFFFFF">留言溥<ahref="PostNew.asp"><fontcolor=#FFFFFF>写新留言</font></a></font></td>
</tr>
<%
PageSize=10假定每页显现10条留言
AllNodesNum=objRootsite.childNodes.length-1
猎取子节点数据(由于是从节点数从0入手下手的所最年夜子节点数要减1)
PageNum=AllNodesNumPageSize+1算出总页数
PageNo=request.querystring("PageNo")
ifPageNo=""then假如是每次取得页面则定位到每页显现最新的留言
PageNo=PageNum
endif
StarNodes=PageNo*PageSize-1取得肇端节点
EndNodes=(PageNo-1)*PageSize取得停止节点
ifEndNodes<0then
EndNodes=0
endif
ifStarNodes>AllNodesNumthen判别肇端节点数是不是凌驾总的节点数
EndNodes=EndNodes-(StarNodes-AllNodesNum)
假如凌驾则停止节点要减往(StarNodes-AllNodesNum)的差值不然下标会超界堕落
StarNodes=AllNodesNum
endif
ifEndNodes<0then
EndNodes=0
endif
whileStarNodes>=EndNodes
从停止节点到超始节点之间读取节点数据
username=objRootsite.childNodes.item(StarNodes).childNodes.item(1).text
取得用户名
fromwhere=objRootsite.childNodes.item(StarNodes).childNodes.item(2).text
取得用户来自那边
Posttime=objRootsite.childNodes.item(StarNodes).childNodes.item(3).text
取得留言工夫
homepage=objRootsite.childNodes.item(StarNodes).childNodes.item(4).text
取得用户主页
email=objRootsite.childNodes.item(StarNodes).childNodes.item(5).text
取得用户Eamil
text=objRootsite.childNodes.item(StarNodes).childNodes.item(6).text
获昨留言内容
*****************************************************************************
这里使作了XML的DOM来读取数据,明显objRootsite对像所对应的节点为<NewList>
objRootsite.childNodes.item(StarNodes)所对应的节点就是<list>节点由于不至一个<list>节点以是用了item()来辨认以后节点数据,跟着StarNodes的递加<list>节点根着往上移一个个读取<list>节点数据。
objRootsite.childNodes.item(StarNodes).childNodes.item(1).text所对应的节点为详细的每一个节点的文本值,这里(1)所对应的就是username用户名(由于<list>节点的子节点才是我们真正所要的)
******************************************************************************
text=replace(text,chr(13),"<br>")
替换回车
text=replace(text,chr(32),"")
替换空格
%>
<trbgcolor="#F0F0F0">
<tdwidth="21%"height="94"valign="top">姓名:<%=username%><br>
来自:<%=fromwhere%><br>
</td>
<tdwidth="79%"height="94"valign="top">|<ahref="<%=homepage%>"target=_blanktitle="<%=username%>的主页">主页</a>
||<ahref="mailto:<%=email%>"title="给<%=username%>写信">信箱</a>||<fontcolor="#CC6633">
留言工夫:<%=Posttime%></font>|
<hr>
<%=text%></td>
</tr>
<trbgcolor="#FFFFFF"align="right">
<tdcolspan="2"></td>
</tr>
<%
StarNodes=StarNodes-1
wend
setobjXML=nothing
%>
<trbgcolor="#FFFFFF"align="right">
<tdcolspan="2">共有<<%=PageNum%>>页
<%
ifcint(PageNo)<>PageNumthen分页
response.write"<ahref=index.asp?PageNo="&(PageNo+1)&">上一页</a>"
endif
ifcint(PageNo)<>1then
response.write"<ahref=index.asp?PageNo="&(PageNo-1)&">下一页</a>"
endif
%>
</td>
</tr>
</table>
</body>
</html>
6、创建写新留言程序(PostNew.asp)
这个文件要完成的功效就是写进新的XML节点,起首创立一个XML对像然后把XML读进内存中,使用appendChild()办法到场我们天生的XML节点。
<%
username=request.form("username")
ifusername<>""then
fromwhere=request.form("fromwhere")
homepage=request.form("homepage")
email=request.form("email")
text=request.form("text")
text=replace(text,"<","<")
Posttime=now()
strSourceFile=Server.MapPath("/")&"List.xml"
猎取XML文件的路径这里依据你的假造目次分歧而分歧
SetobjXML=Server.CreateObject("Microsoft.XMLDOM")
创立XML对像
objXML.load(strSourceFile)
把XML文件读进内存中
SetobjRootlist=objXML.documentElement.selectSingleNode("NewList")
拔取<NewList>节点
ifobjRootlist.hasChildNodesthen
判别<NewList>是不是有子节点(由于假如是每次<NewList>是没有子节点的,
’假如不加判别在第一次运得时就会报错
id=objRootlist.lastchild.firstchild.text+1
这里取得将要拔出子节点的ID号,其ID号为<NewList>的最初一个子节点(lastchild)的第一个子节点(firstchild)的ID号加1(这里我们依照干系型数据库的ID号来递增)
else
如是没有字子节点则是第一次留言ID号设为1
id=1
endif
brstr=chr(13)&chr(10)&chr(9)
为了拔出XML文件中的节点换行空格分列划一
’(固然你也能够不必如许只是为了XML数据悦目而以)
XMLnode=brstr&"<list>"&brstr&_
"<id>"&id&"</id>"&brstr&_
"<username>"&username&"</username>"&brstr&_
"<fromwhere>"&fromwhere&"</fromwhere>"&brstr&_
"<Posttime>"&Posttime&"</Posttime>"&brstr&_
"<homepage>"&homepage&"</homepage>"&brstr&_
"<email>"&email&"</email>"&brstr&_
"<text>"&text&"</text>"&brstr&_
"</list>"&chr(13)
依据失掉的数据创建XML片断
setobjXML2=Server.CreateObject("Microsoft.XMLDOM")
创建一个新XML对像
objXML2.loadXML(XMLnode)
把XML版片断读进内存中
setrootNewNode=objXML2.documentElement
取得objXML2的根节点
objRootlist.appendChild(rootNewNode)
把XML片断拔出到List.xml中
objXML.save(strSourceFile)
存储lsit.xml文件(由于不存储List.xml只在内存中更新了)
setobjXML=nothing
setobjXML2=nothing
response.write"感谢您的留言"
response.end
endif
%>
<html>
<head>
<title>UntitledDocument</title>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
<styletype="text/css">
<!--
td{font-size:9pt}
-->
</style>
</head>
<bodybgcolor="#0099CC"text="#000000">
<tablewidth="80%"border="0"cellspacing="1"cellpadding="4"align="center"bgcolor="#FFFFFF">
<formaction="PostNew.asp"method="post"name="form1">
<trbgcolor="#000000">
<tdcolspan="2"><fontcolor="#FFFFFF">新留言</font></td>
</tr>
<trbgcolor="#EFEFEF">
<tdwidth="19%"align="right">姓名:</td>
<tdwidth="81%">
<inputtype="text"name="username">
**</td>
</tr>
<trbgcolor="#EFEFEF">
<tdwidth="19%"align="right">来自:</td>
<tdwidth="81%">
<inputtype="text"name="fromwhere"value="中国">
</td>
</tr>
<trbgcolor="#EFEFEF">
<tdwidth="19%"align="right">主页:</td>
<tdwidth="81%">
<inputtype="text"name="homepage"value="http://">
</td>
</tr>
<trbgcolor="#EFEFEF">
<tdwidth="19%"align="right">Email:</td>
<tdwidth="81%">
<inputtype="text"name="email">
</td>
</tr>
<trbgcolor="#EFEFEF">
<tdwidth="19%"align="right"valign="top">内容:</td>
<tdwidth="81%">
<textareaname="text"cols="60"rows="10"></textarea>
</td>
</tr>
<trbgcolor="#EFEFEF">
<tdwidth="19%"align="right"></td>
<tdwidth="81%">
<inputtype="submit"name="Submit"value="提交">
<inputtype="reset"name="Submit2"value="重填">
</td>
</tr>
</form>
</table>
</body>
</html>
7、总结
到这里我们就创建一个复杂并有分页功效的XML留言本了,呵看完了复杂吧,实在我这里只起一个举一反三的功效,其目标是引诱人人创建更庞大更好的ASP+XML程序,比方:所下面的留言本加上复兴功效,办理功效,点击计数据功效等,乃至你能够把它变一个BBS等等。最初留言本运转了局以下:
(List.xml在IE5上面的运转了局)
(留言本index.asp运转了局)
(PostNew.asp运得了局)
最初假如你拷贝我下面的程序的不克不及运转,但是是拷贝时大概是我正文时堕落了(不外首页要反省strSourceFile=Server.MapPath("/")&"List.xml"这里是不是堕落了,不外我能够告知你假如是提醒短少对像那末多是这里堕落了),最初你能够到http://Page2000.xiloo.com往下载源程序,也能够给我来信asp_boys@cmmail.com我会尽快给你寄往源程序。假如你有甚么成绩能够到http://www.4u2v.com/bbs由于我多在那边回覆一些我晓得的成绩。大家可以自己去看一看.可以说看得想呕吐.以前有次下了个动网来看.里面连基本内置函数的保护措施(函数没防御性)都没有.难怪经常补这个补那个了.可能现在.NET版会好点吧 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。 我想问如何掌握学习节奏(先学什么再学什么)最好详细点? Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件 先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习 下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。 在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。 用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。 先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习
页:
[1]