仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 528|回复: 9
打印 上一主题 下一主题

[学习教程] ASP网页编程之用XML分离数据库,给服务器减负。

[复制链接]
小女巫 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:30:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
ASP最大的缺点在于网络的安全性和可靠性,企业将经营数据放在开放的平台上,最大的担忧就是如何保证这些数据不被其他人破坏。到了明天,数据库已成了网站的魂灵,能够说,没有对数据举行会合办理
就算不上是一个真实的网站。而ASP加数据库,更成了支流中的支流,网站里的用户登录,
论坛,留言本都成了它们用武之地,夙昔用51个文件才干做成的事,如今用2个文件就能够
了,但ASP加数据库,却并不是完善,特别是与服务器举行频仍的交互方面。

好比按ASP+数据库的计划,我们完整能够将那位敬业的站长的事情简化为两个文件:一个
数据库文件,纪录小说的一切章节;另外一个ASP文件,用来读取数据库的内容;当客户端
点击“下一章”的时分即可以扫瞄下一章内容……切实其实,这看似很直不雅便利,但不成乎视
的是,每当我们扫瞄下一章的时分,我们的扫瞄器城市主动盲目地往会见一次数据库,因
此,当有会见者耐烦地将这本小说读完的时分,我们的数据库已与它亲热打仗了49次了。
那假如同时有N个49次呢?谁还能包管本人的服务器仍旧能沉着地对付一切哀求?出格是一
些供应了搜刮数据,将数据分页显现的网站,服务器不胜重负的征象更应当器重,由于查询
了局有N页,就暗示会见者遍览一切了局必要毗连服务器打N次。

假如如今你说“N次就N次吧,咱无所谓”,那末你应当即刻用鼠标点击扫瞄器的“前进”
由于我上面将谈到一些渣滓内容。固然,假如你也想让你的数据库程序酿成“N页纪录,
一次交互”的话,接待持续看下往,我们将一同切磋XML与数据库的整合使用。

实在XML其实不像很多人想的那样空着名声,而无实践用处。我不晓得你是否是也这么想,但
在网上很难见到一些真正使用了XML的网站,这是现实。如今,我列出几条独占XML才干实
现的案例,但愿可以以此证实XML的有用与壮大:

1.1个XML文件+1个一般HTML文件=49章小说分章显现
合用于那些不撑持ASP的一般主页空间,这类情形下XML完整取代了数据
库,很典范地完成了数据与排版的分别。XML与HTML完整合作。

2.1个XML文件+1到N个ASP文件=留言本/论坛
合用于那些禁用了文件组件FileSystemObject与数据库组件的ASP主页空
间,不必文件存取与数据库,用XML还是能够做留言本与论坛,并完成数
据库的一切功效。
(我在本论坛宣布的“第三种路子-----基于XML的ASP留言板”中,具体
地论述了这一手艺,有乐趣的话能够在论坛中搜刮此文。)

3.1个数据库+1个嵌进了XML的ASP文件=“N页纪录,一次交互”

能够说,这几种手艺都表现了XML的精华。出格是第2种手艺,XML充实证实了本身的上风――
既无数据库的壮大又具有文本文件的轻便(一个.mdb文件上百K,而一个.xml文件才几k,并且
数据库文件修正要借助专门软件或绝对应的ASP程序,但xml文件,记事本足矣。)更让人兴
奋的是,XML完整能够抛开文件存取组件与数据库组件完成数据的写进读取,乃至新建文件。
而我们将要谈到的“N页纪录,一次交互”则更是XML对数据库的周全超出。

先看上面这个XML文件:

<?xmlversion="1.0"encoding="gb2312"?>
<在线播放>
<歌曲>
<歌名>HelloGoodbye</歌名>
<URL>ftp://61.139.37.148/music/songs01/english/beatles/hellogoodbye.mp3</URL>
<演唱者>TheBeatles</演唱者>
<歌词>Yousayyes,Isayno</歌词>
</歌曲>
<歌曲>
<歌名>Yesterday</歌名>
<URL>http://www.mayia.com/beatlescom/beatles/mp3/mp3/yesterday.mp3</URL>
<演唱者>TheBeatles</演唱者>
<歌词>Yesterday,allmytroublesseemedsofaraway</歌词>
</歌曲>
</在线播放>
碰运气,用记事本编纂一下这个文件,并保留文件名为songList.xml,然后用IE扫瞄器翻开
这个文件,假如没有语法毛病,便可在扫瞄器中显现XML所独占的树状页面。
点击前面的链接检察效果:XML文件

这就是一个正当的XML文档,而XML文档的划定规矩与格局也十分自在,假如你要创立一个新的XML
文件,只需一字不改地照写第一行“<?xmlversion="1.0"encoding="gb2312"?>”,尔后面
的标签与标签之间的text就能够很随便,仅仅恪守以下划定规矩便可:

1.首标签与尾标签必需对应,能够反复,但不成以嵌套。
2.标签的定名划定规矩与JAVA/C/C++等程序言语的变量定名划定规矩类似,辨别巨细写。
3.一个文档只能有一个根元素,照实例中的“<在线播放>”
4.独一的关头字“XML”,标签不克不及以这三个字母开首。
5.假如文档与划定规矩有所抵触,将导制XML文档在扫瞄器中没法一般显现,亦暗示非正当的XML
文档。

OK,我们已晓得如何写一个正当的XML文档了,下一步我们将入手下手切磋将XML文件嵌进到HTML
文件中,并用VBScript剧本言语操纵XML文档中的数据。先看上面这个文件:


<html>
<head>
<title>用XML嵌进HTML</title>
</head>
<bodybgcolor="#000000"text="#FFFFFF">

<xmlid="xmlFile">
<在线播放>
<歌曲>
<歌名>HelloGoodbye</歌名>
<URL>ftp://61.139.37.148/music/songs01/english/beatles/hellogoodbye.mp3</URL>
<演唱者>TheBeatles</演唱者>
<歌词>Yousayyes,Isayno</歌词>
</歌曲>
<歌曲>
<歌名>Yesterday</歌名>
<URL>http://www.mayia.com/beatlescom/beatles/mp3/mp3/yesterday.mp3</URL>
<演唱者>TheBeatles</演唱者>
<歌词>Yesterday,allmytroublesseemedsofaraway</歌词>
</歌曲>
</在线播放>
</xml>

<scriptlanguage="VBScript">
setxml=xmlFile.recordset
xml.MoveFirst
document.write"第一笔记录<BR>"
document.writexml("歌名")&"<BR>"
document.writexml("演唱者")&"<BR>"
document.writexml("URL")&"<BR>"
document.writexml("歌词")&"<BR><br>"
xml.MoveNext
document.write"第二笔记录<BR>"
document.writexml("歌名")&"<BR>"
document.writexml("演唱者")&"<BR>"
document.writexml("URL")&"<BR>"
document.writexml("歌词")&"<BR>"
</script>
</body>
</html>
点击前面的链接检察实例:检察
在这个HTML文件中,我们到场了一对<xml></xml>标志,用来嵌进一个外部XML文档。
嵌进在HTML文件中的XML文档一样地遵守与自力的XML文档一样的划定规矩,只是省往了自力
XML文档的声明部分“<?xmlversion="1.0"encoding="gb2312"?>”。在<XML>标签中,
我们设置了XML的ID:xmlFile,以便前面的剧本言语会见该XML工具。

“setxml=xmlFile.recordset”语句创立了一个能够会见XML的游标。这个游标
相似于ASP中的RecordSet工具,所具有的办法与后者也几近是完整一样的。如:

当我们用setxml=xmlFile.recordset创立了一个名为xml的数据游标后,我们就能够使
用以下办法与属性:

xml.MoveFirst()移到第一笔记录
xml.MoveNext()移到下一条
xml.MovePrevious()移到上一条
xml.MoveLast()移到最初一条

xml.BOF暗示游标在第一笔记录之前
xml.EOF暗示游标在最初一笔记录以后
xml.RecordCount纪录集总数
xml.AbsolutePosition游标以后地位

xml.AddNew()增加一笔记录
xml.Delete()删除一笔记录

比方:我们要显现某一首歌的歌名,我们只须将游标移到该纪录上,再用xml("歌名")
即可猎取XML文档中<歌名>与</歌名>之间的文本。十分便利。

好了,在懂得以上关于XML的这些内容后,我们完整能够入手下手我们真实的服务器减负
举动了!

我们的思绪是:

1.客户端向服务器的某个ASP程序收回查询前提。
2.该ASP程序呼应,并毗连数据库。
3.数据库将查询了局前往给该ASP程序。
4.取得数据后,用ASP程序将数据格局化为XML格局,
从而将查询了局创建为该ASP的内嵌式XML工具。
5.在客户端完成XML的分页(分页办法相似于数据库分页)
6.今后,不管是客户端将查询了局翻几页看几遍,均不会再与服务器产生交互。
别的,就算是客户端断开网线,也仍旧能够扫瞄还未扫瞄的分页页面。

上面是我写的一个歌曲在线播放程序页面程序,由两个文件组成:
songList.mdb一个数据库,装载着歌曲信息。
songList.aspASP程序,数据库中的数据格局成XML,页面完整显现后,不管点几次
“下一首”,也不会与服务器交互。

◆songList.asp◆
点击前面的链接检察实例检察

<html>
<head>
<title>殷亮的在线播放</title>
<styletype="text/CSS">
<!--
.input
{
background-color:#000000;
border:#000000;
color:#FF9900;
}
-->
</style>
</head>

<bodybgcolor="#000000"text="#FF9900">
<%毗连数据库
setsongCon=Server.CreateObject("ADODB.connection")
conPath=Server.MapPath("songList.mdb")
conStr="DRIVER={MicrosoftAccessDriver(*.mdb)};dbq="
songCon.open(conStr&conPath)
setrs=Server.CreateObject("ADODB.Recordset")
rs.open"Select*fromsongList",songCon,3,3
%>

<!--静态天生内嵌式XML文档,"在线播放"是根标志-->
<xmlid="xmlFile">
<在线播放>
<%
Ifnotrs.eofthen
whilenotrs.eof
%>
<歌曲>
<歌名><%=trim(rs("song_name"))%></歌名>
<URL><%=trim(rs("song_url"))%></URL>
<演唱者><%=trim(rs("songer"))%></演唱者>
<歌词><%=trim(rs("song_lyrics"))%></歌词>
</歌曲>
<%
rs.movenext
wend
EndIf
%>
</在线播放>
</xml>
<divid="Layer1"style="position:absolute;width:500px;height:59px;z-index:1;left:118px;top:4px;">
<!--WindowMediaPlayer控件-->
<OBJECTclassid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95"width="500"height="43"id="player"style="WIDTH:500px;HEIGHT:43px"VIEWASTEXT>
<PARAMNAME="AudioStream"VALUE="-1">
<PARAMNAME="AutoSize"VALUE="0">
<PARAMNAME="AutoStart"VALUE="-1">
<PARAMNAME="AnimationAtStart"VALUE="-1">
<PARAMNAME="AllowScan"VALUE="-1">
<PARAMNAME="AllowChangeDisplaySize"VALUE="-1">
<PARAMNAME="AutoRewind"VALUE="0">
<PARAMNAME="Balance"VALUE="0">
<PARAMNAME="BaseURL"VALUE="">
<PARAMNAME="BufferingTime"VALUE="5">
<PARAMNAME="CaptioningID"VALUE="">
<PARAMNAME="ClickToPlay"VALUE="-1">
<PARAMNAME="CursorType"VALUE="0">
<PARAMNAME="CurrentPosition"VALUE="-1">
<PARAMNAME="CurrentMarker"VALUE="0">
<PARAMNAME="DefaultFrame"VALUE="">
<PARAMNAME="DisplayBackColor"VALUE="0">
<PARAMNAME="DisplayForeColor"VALUE="16777215">
<PARAMNAME="DisplayMode"VALUE="0">
<PARAMNAME="DisplaySize"VALUE="4">
<PARAMNAME="Enabled"VALUE="-1">
<PARAMNAME="EnableContextMenu"VALUE="-1">
<PARAMNAME="EnablePositionControls"VALUE="-1">
<PARAMNAME="EnableFullScreenControls"VALUE="0">
<PARAMNAME="EnableTracker"VALUE="-1">
<PARAMNAME="Filename"VALUE="">
<PARAMNAME="InvokeURLs"VALUE="-1">
<PARAMNAME="Language"VALUE="-1">
<PARAMNAME="Mute"VALUE="0">
<PARAMNAME="PlayCount"VALUE="1">
<PARAMNAME="PreviewMode"VALUE="0">
<PARAMNAME="Rate"VALUE="1">
<PARAMNAME="SAMILang"VALUE="">
<PARAMNAME="SAMIStyle"VALUE="">
<PARAMNAME="SAMIFileName"VALUE="">
<PARAMNAME="SelectionStart"VALUE="-1">
<PARAMNAME="SelectionEnd"VALUE="-1">
<PARAMNAME="SendOpenStateChangeEvents"VALUE="-1">
<PARAMNAME="SendWarningEvents"VALUE="-1">
<PARAMNAME="SendErrorEvents"VALUE="-1">
<PARAMNAME="SendKeyboardEvents"VALUE="0">
<PARAMNAME="SendMouseClickEvents"VALUE="0">
<PARAMNAME="SendMouseMoveEvents"VALUE="0">
<PARAMNAME="SendPlayStateChangeEvents"VALUE="-1">
<PARAMNAME="ShowCaptioning"VALUE="0">
<PARAMNAME="ShowControls"VALUE="-1">
<PARAMNAME="ShowAudioControls"VALUE="-1">
<PARAMNAME="ShowDisplay"VALUE="0">
<PARAMNAME="ShowGotoBar"VALUE="0">
<PARAMNAME="ShowPositionControls"VALUE="-1">
<PARAMNAME="ShowStatusBar"VALUE="0">
<PARAMNAME="ShowTracker"VALUE="-1">
<PARAMNAME="TransparentAtStart"VALUE="0">
<PARAMNAME="VideoBorderWidth"VALUE="0">
<PARAMNAME="VideoBorderColor"VALUE="0">
<PARAMNAME="VideoBorder3D"VALUE="0">
<PARAMNAME="Volume"VALUE="0">
<PARAMNAME="WindowlessVideo"VALUE="0">
</OBJECT>
</div>


<divid="Layer3"style="position:absolute;width:200px;height:115px;z-index:3;left:120px;top:140px;"><imgsrc="http://edu.cnzz.cn/NewsInfo/P_online.jpg"width="300"height="170"></div>
<divid="Layer4"style="position:absolute;width:191px;height:54px;z-index:4;left:430px;top:199px;">
<tablewidth="190"height="52"border="1"align="right"bordercolor="#000000"bgcolor="#FF9900">
<tr>
<tdheight="23"valign="bottom">
<divalign="center"></div>

<divalign="right">
<inputname="btnPre"type="button"disabled="true"id="btnPre"value="上一首">
</div></td>
</tr>
<tr>
<tdvalign="top">
<divalign="right">
<inputname="btnNext"type="button"id="btnNext"value="下一首">
</div></td>
</tr>
</table>
</div>
<divid="Layer2"style="position:absolute;width:503px;height:58px;z-index:2;left:120px;top:67px;">
<tablewidth="501"border="1">
<tr>
<tdwidth="100"><fontcolor="#FFFFFF"size="2">播放内置歌曲:</font></td>
<tdwidth="317">
<SELECTname="list"size="1"id="list"style="WIDTH:328px;BACKGROUND-COLOR:darkorange">
<!--用轮回来初始化下拉列表-->
<scriptlanguage="VBScript">
setxml=xmlFile.recordset
xml.MoveFirst
dimnum
fornum=0toxml.RecordCount-1
document.write("<OPTIONvalue="&xml("url")&">"&xml("歌名")&"</OPTION>")
xml.MoveNext
next
xml.MoveFirst
</script>
</SELECT>
</td>
<tdwidth="62"><divalign="right">
<inputname="btnLAN"type="button"id="btnLAN"value="播放">
</div></td>
</tr>
<tr>
<td><fontcolor="#FFFFFF"size="2">播放收集歌曲:</font></td>
<td><inputname="textURL"type="text"id="textURL"style="WIDTH:328px;BACKGROUND-COLOR:darkorange;color:#000000;"></td>
<td><divalign="right">
<inputname="btnNET"type="reset"id="btnNET"value="播放">
</div></td>
</tr>
</table>
</div>
<divid="Layer5"style="position:absolute;width:500px;height:20px;z-index:5;left:120px;top:320px;">
<p><fontcolor="#FFFFFF"size="2">正在播放:
<inputname="textSonger"type="text"class="input"id="textSonger"size="15">
演唱的
<inputname="textSongName"type="text"class="input"id="textSongName"size="35">
</font></p>
</div>
<divid="Layer6"style="position:absolute;width:500px;height:150px;
z-index:6;left:120px;top:349px;">
<textareaname="area"cols="68"rows="15"id="area"
style="BORDER-RIGHT:whitedouble;BORDER-TOP:whitedouble;
BORDER-LEFT:whitedouble;COLOR:#000000;DIRECTION:ltr;
BORDER-BOTTOM:whitedouble;BACKGROUND-COLOR:darkorange;
TEXT-ALIGN:left">
</textarea>
</div>

<!--各按钮的单击事务-->
<scriptlanguage="VBScript">
subplay()
textSonger.value=xml("演唱者")
textSongName.value=xml("歌名")
textURL.value=""
area.value=xml("歌词")
player.filename=xml("URL")

ifxml.AbsolutePosition=xml.recordcountthen
btnNext.disabled=true
else
btnNext.disabled=false
endif

ifxml.AbsolutePosition=1then
btnPre.disabled=true
else
btnPre.disabled=false
endif
endsub

subbtnLAN_onclick
xml.MoveFirst
whilexml("URL")list.value
xml.MoveNext
wend
callplay()
endsub

subbtnNET_onclick
player.filename=textURL.value
textSonger.value=""
textSongName.value=""
area.value="自界说收集歌曲"
endsub

subbtnPre_onclick
xml.MovePrevious
list.selectedIndex=list.selectedIndex-1
callplay()
endsub

subbtnNext_onclick
xml.MoveNext
list.selectedIndex=list.selectedIndex+1
callplay()
endsub
</script>
</body>
</html>
如今,你晓得怎样给服务器减负了吗?^-^

本文旨在切磋,若有讹夺,接待斧正与会商。
感激站长miles这些日子来不倦的匡助,无以报答,惟有灌上此文。
由于ASP提供的是一对多的服务,所以用户的一些特殊需求很难得到满足。
只想知道 该用户已被删除
沙发
发表于 2015-1-17 10:38:39 | 只看该作者
以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。
小妖女 该用户已被删除
板凳
发表于 2015-1-20 16:28:26 | 只看该作者
多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。
若天明 该用户已被删除
地板
发表于 2015-1-29 12:57:03 | 只看该作者
学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。
柔情似水 该用户已被删除
5#
发表于 2015-2-6 01:08:47 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
老尸 该用户已被删除
6#
发表于 2015-2-14 19:31:16 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。
分手快乐 该用户已被删除
7#
发表于 2015-3-4 10:01:56 | 只看该作者
另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件)
金色的骷髅 该用户已被删除
8#
发表于 2015-3-11 18:12:00 | 只看该作者
Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
深爱那片海 该用户已被删除
9#
发表于 2015-3-19 06:25:17 | 只看该作者
Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
乐观 该用户已被删除
10#
发表于 2015-3-27 10:08:47 | 只看该作者
掌握asp的特性而且一定要知道为什么。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-30 00:51

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表