塵緣

          簡單生活,開心工作。
          隨筆 - 1, 文章 - 2, 評(píng)論 - 1, 引用 - 0
          數(shù)據(jù)加載中……

          ASP專欄——ASP生成靜態(tài)文件

                  對(duì)于Web開發(fā)人員來說,生成靜態(tài)文件這個(gè)概念并不陌生。

                  對(duì)于Web開發(fā)來說,如何能避免客戶端訪問時(shí)不停的查詢數(shù)據(jù)庫?現(xiàn)在比較常用的有兩種方法,一種是使用緩存技術(shù),將查詢出來的結(jié)果緩存至緩存框架中,以后當(dāng)有用戶訪問時(shí),直接通過緩存框架讀取數(shù)據(jù),這樣就避免了大量用戶同時(shí)訪問數(shù)據(jù)庫。另一種方法就是使用靜態(tài)生成技術(shù),靜態(tài)生成技術(shù)常見的做法有兩種,一種是通過模板文件(模板文件中保存好前期定義好的變量,后臺(tái)通過數(shù)據(jù)加載對(duì)相應(yīng)變量進(jìn)行替換,然后再對(duì)替換完的數(shù)據(jù)進(jìn)行生成靜態(tài)文件);一種是直接訪問Web地址,通過Http協(xié)議讀取網(wǎng)頁內(nèi)容,然后再將內(nèi)容生成相應(yīng)的靜態(tài)文件。

                  對(duì)于像Java、.NET這些語言來說,外界都會(huì)給出相應(yīng)的緩存框架,Java的緩存框架就更多了。但對(duì)Asp這樣的低端語言來說呢,只能通過用靜態(tài)生成技術(shù)來實(shí)現(xiàn)減少用戶大量的數(shù)據(jù)訪問,本文就結(jié)合自己準(zhǔn)備要做的項(xiàng)目來談?wù)凙sp如何實(shí)現(xiàn)靜態(tài)生成。

                  Asp靜態(tài)生成技術(shù)的原理上面我已經(jīng)講過了,兩種做法最終都會(huì)通過讀取HTML文件(或動(dòng)態(tài)或模板文件)來生成相應(yīng)的靜態(tài)頁面。

          方法一:通過模板文件來實(shí)現(xiàn)靜態(tài)化:

                  如題所示,通過模板文件實(shí)現(xiàn)靜態(tài)化,當(dāng)然首先要?jiǎng)?chuàng)建相應(yīng)的模板文件,我的模板文件如下template.htm:

          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" <head>
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
          <title><#PageTitle#></title>
          </head>

          <body>
           <#article:title#>
           <#article:content#>
          </body>
          </html>

                  請(qǐng)注意:我使用<#article:title#>做為變量,這樣的話,在進(jìn)行文件替換的時(shí)候我就會(huì)查詢包含此變量的內(nèi)容進(jìn)行替換。

                  模板文件創(chuàng)建后,就是靜態(tài)化處理的核心部分,代碼如下:

          <%
          filename="Template.htm"
          'tt.txt是模板文件
          Dim objFSO,objCountFile,FiletempData
          ' 創(chuàng)建FSO文件對(duì)象
          Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
          Set objCountFile = objFSO.OpenTextFile(Server.MapPath(filename),1,True)
          FSOFileRead = objCountFile.ReadAll
          'response.write FSOFileRead&"<br>"
          FSOFileRead = replace(FSOFileRead,"<#PageTitle#>","杰之藍(lán)")
          FSOFileRead = replace(FSOFileRead,"<#article:title#>","杰之藍(lán)Asp靜態(tài)生成技術(shù)")
          FSOFileRead = replace(FSOFileRead,"<#article:content#>","杰之藍(lán)Asp靜態(tài)生成技術(shù)詳細(xì)內(nèi)容。")
          Response.write FSOFileRead
          objCountFile.Close


          Set fso = Server.CreateObject("Scripting.FileSystemObject")
          'fso.CreateFolder(Server.MapPath(folder)) 創(chuàng)建文件夾
          Set fout = fso.CreateTextFile(Server.MapPath("aaa.html"))
          fout.WriteLine FSOFileRead
          fout.close

          %>

           請(qǐng)注意:<#PageTitle#>,<#article:title#>,<#article:content#>這三個(gè)變量為我在模板頁面中使用,此處將這些變量變成真實(shí)的值;對(duì)文件替換完成后,就對(duì)進(jìn)行文件的創(chuàng)建,此處要求您的服務(wù)器可以使用FSO對(duì)象,我將文件生成后放在于模板文件同級(jí)的目錄下,當(dāng)然如果你要?jiǎng)?chuàng)建在別的目錄下的時(shí)候你就要將創(chuàng)建文件夾那個(gè)注釋放開,然后添加上你自己的目錄;文件創(chuàng)建完成后一定記得關(guān)閉FSO對(duì)象。

          方法二:讀取Url地址生成靜態(tài)文件

                  這種方法就像上面所說的是通過讀取URL地址,然后提取URL地址中的內(nèi)容,最后再生成相應(yīng)的靜態(tài)文件。

                  下面來看具體代碼:

          <%
          '///////////////////////////////////////////////////////////////////////////////
          '//              ASP生成靜態(tài)
          '// 作    者:    杰之藍(lán)
          '// 版權(quán)所有:   
          www.52cfml.com
          '// 技術(shù)支持:    www.52cfml.com
          '// 開始時(shí)間:    2010-07-16
          '// 最后修改:   
          '// 備    注:   
          '///////////////////////////////////////////////////////////////////////////////

          response.write "<textarea cols=""79"" rows=""30"">"&GetHttpPage(("

          '函數(shù)名:GetHttpPage
          '作 用:獲取網(wǎng)頁源碼
          '參 數(shù):HttpUrl ------網(wǎng)頁地址,Cset 編碼
          '===============================================
          Function GetHttpPage(ByVal URL, ByVal Cset)
           Dim BlockStartTime
           On Error Resume Next
           Dim Http
           If IsNull(URL)=True Or Len(URL)<18 Or URL="$False$" Then
              GetHttpPage="$False$"
              Exit Function
           End If
           BlockStartTime = Timer()
           Set Http=server.createobject("MSXML2.XMLHTTP")
           Http.open "GET",URL,False
           Http.Send()
           '循環(huán)等待數(shù)據(jù)接收
           Dim temp,BlockTimeout
           BlockTimeout = 64
           While (http.ReadyState <> 4)
           ' 判斷是否塊超時(shí)
              temp = Timer() - BlockStartTime
              Response.Write(Timer())
              If (temp > BlockTimeout) Then
            http.abort
            Set Http=Nothing
            GetHttpPage="$False$"
            Exit function
            Response.End
              End If
              http.waitForResponse 10000'等待1000毫秒
           Wend
           
           If Http.Readystate<>4 then
              Set Http=Nothing
              GetHttpPage="$False$"
              Exit function
           End If
           GetHTTPPage=BytesToBstr(Http.responseBody,Cset)
           Set Http=Nothing

           If Err.number<>0 then
              If IsNull(URL)=True Or Len(URL)<18 Or URL="$False$" Then
            GetHttpPage="$False$"
            Exit Function
              End If
              Set Http=Nothing
              Err.Clear
           End If

          End Function

          Function BytesToBstr(body,Cset)
           dim objstream
           set objstream = Server.CreateObject("adodb.stream")
           objstream.Type = 1
           objstream.Mode =3
           objstream.Open
           objstream.Write body
           objstream.Position = 0
           objstream.Type = 2
           objstream.Charset = Cset
           BytesToBstr = objstream.ReadText
           objstream.Close
           set objstream = nothing
          End Function
          %>

                  上述兩種方法都可以生成靜態(tài)文件,只不過每種方法的側(cè)重點(diǎn)不同,有需要的朋友可以根據(jù)自己的需要選擇相應(yīng)的方法,當(dāng)然真實(shí)環(huán)境下必須有數(shù)據(jù)庫的支持,由于本文只是例子,就沒有結(jié)合數(shù)據(jù)庫實(shí)現(xiàn),有需要的朋友可以根據(jù)自己的需要建立相應(yīng)的數(shù)據(jù)庫,對(duì)于方法一來說,模板變量的命名必須是前期定義好的。

                  希望對(duì)朋友們有所幫助。

          作者博客:www.52cfml.com

          posted on 2010-07-16 14:35 IT者 閱讀(354) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # re: ASP專欄——ASP生成靜態(tài)文件  回復(fù)  更多評(píng)論   

          不錯(cuò),收藏了
          2010-07-29 16:28 | 160160

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 昭苏县| 滦平县| 襄城县| 察隅县| 太仆寺旗| 大石桥市| 鞍山市| 西安市| 东港市| 郁南县| 靖安县| 安阳县| 双流县| 新龙县| 台州市| 开封县| 金沙县| 遂平县| 太康县| 英德市| 上蔡县| 华容县| 桑植县| 盖州市| 高雄市| 江津市| 繁峙县| 凤山市| 察雅县| 福州市| 桃园县| 嘉祥县| 灵丘县| 堆龙德庆县| 封开县| 台南市| 太原市| 舞阳县| 兴文县| 汉中市| 名山县|