<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      用XML結合數據庫,給服務器減負。

      [摘要]到了今天,數據庫已經成了網站的靈魂,可以說,沒有對數據進行集中管理就算不上是一個真正的網站。而ASP加數據庫,更成了主流中的主流,網站里的用戶登錄,論壇,留言本都成了它們用武之地,從前用51個文件才...
      到了今天,數據庫已經成了網站的靈魂,可以說,沒有對數據進行集中管理
      就算不上是一個真正的網站。而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文件:

      <?xml version="1.0" encoding="gb2312"?>
      <在線播放>
      <歌曲>
      <歌名>Hello Goodbye</歌名>
      <URL>ftp://61.139.37.148/music/songs01/english/beatles/hellogoodbye.mp3</URL>
      <演唱者>The Beatles</演唱者>
      <歌詞>You say yes, I say no</歌詞>
      </歌曲>
      <歌曲>
      <歌名>Yesterday</歌名>
      <URL>http://www.mayia.com/beatlescom/beatles/mp3/mp3/yesterday.mp3</URL>
      <演唱者>The Beatles</演唱者>
      <歌詞>Yesterday, all my troubles seemed so far away</歌詞>
      </歌曲>
      </在線播放>
      試試看,用記事本編輯一下這個文件,并保存文件名為songList.xml,然后用IE瀏覽器打開
      這個文件,如果沒有語法錯誤,即可在瀏覽器中顯示XML所獨有的樹狀頁面。
      點擊后面的鏈接查看效果:      XML文件

      這就是一個合法的XML文檔,而XML文檔的規則與格式也非常自由,如果你要創建一個新的XML
      文件,只需一字不改地照寫第一行“<?xml version="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>
      <body bgcolor="#000000" text="#FFFFFF">

      <xml id = "xmlFile">
      <在線播放>
      <歌曲>
      <歌名>Hello Goodbye</歌名>
      <URL>ftp://61.139.37.148/music/songs01/english/beatles/hellogoodbye.mp3</URL>
      <演唱者>The Beatles</演唱者>
      <歌詞>You say yes, I say no</歌詞>
      </歌曲>
      <歌曲>
      <歌名>Yesterday</歌名>
      <URL>http://www.mayia.com/beatlescom/beatles/mp3/mp3/yesterday.mp3</URL>
      <演唱者>The Beatles</演唱者>
      <歌詞>Yesterday, all my troubles seemed so far away</歌詞>
      </歌曲>
      </在線播放>
      </xml>

      <script language="VBScript">
      set xml=xmlFile.recordset
      xml.MoveFirst
      document.write "第一條記錄<BR>"
      document.write xml("歌名")&"<BR>"
      document.write xml("演唱者")&"<BR>"
      document.write xml("URL")&"<BR>"
      document.write xml("歌詞")&"<BR><br>"
      xml.MoveNext
      document.write "第二條記錄<BR>"
      document.write xml("歌名")&"<BR>"
      document.write xml("演唱者")&"<BR>"
      document.write xml("URL")&"<BR>"
      document.write xml("歌詞")&"<BR>"
      </script>
      </body>
      </html>
      點擊后面的鏈接查看實例:          查看
      在這個HTML文件中,我們加入了一對<xml></xml>標記,用來嵌入一個內部XML文檔。
      嵌入在HTML文件中的XML文檔一樣地遵循與獨立的XML文檔一樣的規則,只是省去了獨立
      XML文檔的聲明部分“<?xml version="1.0" encoding="gb2312"?>”。在<XML>標簽中,
      我們設置了XML的ID:xmlFile,以便后面的腳本語言訪問該XML對象。

      “set xml=xmlFile.recordset”      語句創建了一個可以訪問XML的游標。這個游標
      類似于ASP中的RecordSet對象,所擁有的方法與后者也幾乎是完全一樣的。如:

      當我們用set xml=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.asp ASP程序,數據庫中的數據格式成XML,頁面完全顯示后,無論點多少次
      “下一首”,也不會與服務器交互。

      ◆songList.asp◆      
      點擊后面的鏈接查看實例            查看

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

      <body bgcolor="#000000" text="#FF9900">
      <% ''''''''''''''''''''連接數據庫'''''''''''''''''''''''''
      set songCon = Server.CreateObject("ADODB.connection")
      conPath = Server.MapPath("songList.mdb")
      conStr = "DRIVER={Microsoft Access Driver (*.mdb)}; dbq="
      songCon.open(conStr & conPath)
      set rs = Server.CreateObject("ADODB.Recordset")
      rs.open "Select * from songList",songCon,3,3
      %>

      <!--動態生成內嵌式XML文檔,"在線播放"是根標記-->
      <xml id = "xmlFile">
      <在線播放>
      <% 
      If not rs.eof then
      while not rs.eof
      %>
      <歌曲>
      <歌名><%= trim(rs("song_name")) %></歌名>
      <URL><%= trim(rs("song_url")) %></URL>
      <演唱者><%= trim(rs("songer")) %></演唱者>
      <歌詞><%= trim(rs("song_lyrics")) %></歌詞>
      </歌曲>
      <% 
      rs.movenext
      wend
      End If 
      %>
      </在線播放>
      </xml>
      <div id="Layer1" style="position:absolute; width:500px; height:59px; z-index:1; left: 118px; top: 4px;">
       <!--Window Media Player控件--> 
       <OBJECT classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" width="500" height="43" id="player" style="WIDTH: 500px; HEIGHT: 43px" VIEWASTEXT>
         <PARAM NAME="AudioStream" VALUE="-1">
      <PARAM NAME="AutoSize" VALUE="0">
      <PARAM NAME="AutoStart" VALUE="-1">
      <PARAM NAME="AnimationAtStart" VALUE="-1">
      <PARAM NAME="AllowScan" VALUE="-1">
      <PARAM NAME="AllowChangeDisplaySize" VALUE="-1">
      <PARAM NAME="AutoRewind" VALUE="0">
      <PARAM NAME="Balance" VALUE="0">
      <PARAM NAME="BaseURL" VALUE="">
      <PARAM NAME="BufferingTime" VALUE="5">
      <PARAM NAME="CaptioningID" VALUE="">
      <PARAM NAME="ClickToPlay" VALUE="-1">
      <PARAM NAME="CursorType" VALUE="0">
      <PARAM NAME="CurrentPosition" VALUE="-1">
      <PARAM NAME="CurrentMarker" VALUE="0">
      <PARAM NAME="DefaultFrame" VALUE="">
      <PARAM NAME="DisplayBackColor" VALUE="0">
      <PARAM NAME="DisplayForeColor" VALUE="16777215">
      <PARAM NAME="DisplayMode" VALUE="0">
      <PARAM NAME="DisplaySize" VALUE="4">
      <PARAM NAME="Enabled" VALUE="-1">
      <PARAM NAME="EnableContextMenu" VALUE="-1">
      <PARAM NAME="EnablePositionControls" VALUE="-1">
      <PARAM NAME="EnableFullScreenControls" VALUE="0">
      <PARAM NAME="EnableTracker" VALUE="-1">
      <PARAM NAME="Filename" VALUE="">
      <PARAM NAME="InvokeURLs" VALUE="-1">
      <PARAM NAME="Language" VALUE="-1">
      <PARAM NAME="Mute" VALUE="0">
      <PARAM NAME="PlayCount" VALUE="1">
      <PARAM NAME="PreviewMode" VALUE="0">
      <PARAM NAME="Rate" VALUE="1">
      <PARAM NAME="SAMILang" VALUE="">
      <PARAM NAME="SAMIStyle" VALUE="">
      <PARAM NAME="SAMIFileName" VALUE="">
      <PARAM NAME="SelectionStart" VALUE="-1">
      <PARAM NAME="SelectionEnd" VALUE="-1">
      <PARAM NAME="SendOpenStateChangeEvents" VALUE="-1">
      <PARAM NAME="SendWarningEvents" VALUE="-1">
      <PARAM NAME="SendErrorEvents" VALUE="-1">
      <PARAM NAME="SendKeyboardEvents" VALUE="0">
      <PARAM NAME="SendMouseClickEvents" VALUE="0">
      <PARAM NAME="SendMouseMoveEvents" VALUE="0">
      <PARAM NAME="SendPlayStateChangeEvents" VALUE="-1">
      <PARAM NAME="ShowCaptioning" VALUE="0">
      <PARAM NAME="ShowControls" VALUE="-1">
      <PARAM NAME="ShowAudioControls" VALUE="-1">
      <PARAM NAME="ShowDisplay" VALUE="0">
      <PARAM NAME="ShowGotoBar" VALUE="0">
      <PARAM NAME="ShowPositionControls" VALUE="-1">
      <PARAM NAME="ShowStatusBar" VALUE="0">
      <PARAM NAME="ShowTracker" VALUE="-1">
      <PARAM NAME="TransparentAtStart" VALUE="0">
      <PARAM NAME="VideoBorderWidth" VALUE="0">
      <PARAM NAME="VideoBorderColor" VALUE="0">
      <PARAM NAME="VideoBorder3D" VALUE="0">
      <PARAM NAME="Volume" VALUE="0">
      <PARAM NAME="WindowlessVideo" VALUE="0">
      </OBJECT>
      </div>


      <div id="Layer3" style="position:absolute; width:200px; height:115px; z-index:3; left: 120px; top: 140px;"><img src="http://www.okasp.com/techinfo/P_online.jpg" width="300" height="170"></div>
      <div id="Layer4" style="position:absolute; width:191px; height:54px; z-index:4; left: 430px; top: 199px;"> 
       <table width="190" height="52" border="1" align="right" bordercolor="#000000" bgcolor="#FF9900">
         <tr>
           <td height="23" valign="bottom"> 
             <div align="center"></div>
               
             <div align="right">
               <input name="btnPre" type="button" disabled="true" id="btnPre" value="上一首">
             </div></td>
         </tr>
         <tr>
           <td valign="top">
      <div align="right"> 
               <input name="btnNext" type="button" id="btnNext" value="下一首">
             </div></td>
         </tr>
       </table>
      </div>
      <div id="Layer2" style="position:absolute; width:503px; height:58px; z-index:2; left: 120px; top: 67px;"> 
       <table width="501" border="1">
         <tr> 
           <td width="100"><font color="#FFFFFF" size="2">播放內置歌曲:</font></td>
           <td width="317">
        <SELECT name="list" size="1" id="list" style="WIDTH: 328px; BACKGROUND-COLOR: darkorange">
       <!--用循環來初始化下拉列表-->
               <script language="VBScript">
      set xml=xmlFile.recordset
      xml.MoveFirst
      dim num
      for num=0 to xml.RecordCount-1
      document.write("<OPTION value="&xml("url")&">"&xml("歌名")&"</OPTION>")
      xml.MoveNext
      next
      xml.MoveFirst 
      </script>
        </SELECT>
       </td>
           <td width="62"><div align="right">
               <input name="btnLAN" type="button" id="btnLAN" value="播放">
             </div></td>
         </tr>
         <tr> 
           <td><font color="#FFFFFF" size="2" >播放網絡歌曲:</font></td>
           <td><input name="textURL" type="text" id="textURL" style="WIDTH: 328px; BACKGROUND-COLOR: darkorange;color: #000000;"></td>
           <td><div align="right">
               <input name="btnNET" type="reset" id="btnNET" value="播放">
             </div></td>
         </tr>
       </table>
      </div>
      <div id="Layer5" style="position:absolute; width:500px; height:20px; z-index:5; left: 120px; top: 320px;"> 
       <p><font color="#FFFFFF" size="2">正在播放: 
         <input name="textSonger" type="text" class="input" id="textSonger" size="15">
         演唱的 
         <input name="textSongName" type="text" class="input" id="textSongName" size="35">
         </font></p>
      </div>
      <div id="Layer6" style="position:absolute; width:500px; height:150px; 
      z-index:6; left: 120px; top: 349px;">
       <textarea name="area" cols="68" rows="15" id="area" 
        style="BORDER-RIGHT: white double; BORDER-TOP: white double; 
      BORDER-LEFT: white double;COLOR: #000000; DIRECTION: ltr; 
      BORDER-BOTTOM: white double;BACKGROUND-COLOR: darkorange; 
      TEXT-ALIGN: left">
       </textarea>
      </div>

      <!--各按鈕的單擊事件-->
      <script language="VBScript">
      sub play()
      textSonger.value=xml("演唱者")
      textSongName.value=xml("歌名")
      textURL.value=""
      area.value=xml("歌詞")
      player.filename=xml("URL")

      if xml.AbsolutePosition=xml.recordcount then
      btnNext.disabled=true
      else
      btnNext.disabled=false
      end if

      if xml.AbsolutePosition=1 then
      btnPre.disabled=true
      else
      btnPre.disabled=false
      end if
      end sub

      sub btnLAN_onclick
      xml.MoveFirst
      while xml("URL")<>list.value
      xml.MoveNext
      wend
      call play()
      end sub

      sub btnNET_onclick
      player.filename = textURL.value
      textSonger.value = ""
      textSongName.value = ""
      area.value = "自定義網絡歌曲"
      end sub

      sub btnPre_onclick
      xml.MovePrevious
      list.selectedIndex = list.selectedIndex - 1
      call play()
      end sub

      sub btnNext_onclick
      xml.MoveNext
      list.selectedIndex = list.selectedIndex + 1
      call play()
      end sub
      </script>
      </body>
      </html>
      現在,你知道怎么給服務器減負了嗎?^-^

      本文旨在探討,如有錯漏,歡迎指正與討論。
      感謝站長miles這些日子來不倦的幫助,無以回報,唯有灌上此文。



      日韩精品一区二区三区高清