塵緣

          簡單生活,開心工作。
          隨筆 - 1, 文章 - 2, 評論 - 1, 引用 - 0
          數據加載中……

          ASP專欄——ASP生成靜態文件

                  對于Web開發人員來說,生成靜態文件這個概念并不陌生。

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

                  對于像Java、.NET這些語言來說,外界都會給出相應的緩存框架,Java的緩存框架就更多了。但對Asp這樣的低端語言來說呢,只能通過用靜態生成技術來實現減少用戶大量的數據訪問,本文就結合自己準備要做的項目來談談Asp如何實現靜態生成。

                  Asp靜態生成技術的原理上面我已經講過了,兩種做法最終都會通過讀取HTML文件(或動態或模板文件)來生成相應的靜態頁面。

          方法一:通過模板文件來實現靜態化:

                  如題所示,通過模板文件實現靜態化,當然首先要創建相應的模板文件,我的模板文件如下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>

                  請注意:我使用<#article:title#>做為變量,這樣的話,在進行文件替換的時候我就會查詢包含此變量的內容進行替換。

                  模板文件創建后,就是靜態化處理的核心部分,代碼如下:

          <%
          filename="Template.htm"
          'tt.txt是模板文件
          Dim objFSO,objCountFile,FiletempData
          ' 創建FSO文件對象
          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#>","杰之藍")
          FSOFileRead = replace(FSOFileRead,"<#article:title#>","杰之藍Asp靜態生成技術")
          FSOFileRead = replace(FSOFileRead,"<#article:content#>","杰之藍Asp靜態生成技術詳細內容。")
          Response.write FSOFileRead
          objCountFile.Close


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

          %>

           請注意:<#PageTitle#>,<#article:title#>,<#article:content#>這三個變量為我在模板頁面中使用,此處將這些變量變成真實的值;對文件替換完成后,就對進行文件的創建,此處要求您的服務器可以使用FSO對象,我將文件生成后放在于模板文件同級的目錄下,當然如果你要創建在別的目錄下的時候你就要將創建文件夾那個注釋放開,然后添加上你自己的目錄;文件創建完成后一定記得關閉FSO對象。

          方法二:讀取Url地址生成靜態文件

                  這種方法就像上面所說的是通過讀取URL地址,然后提取URL地址中的內容,最后再生成相應的靜態文件。

                  下面來看具體代碼:

          <%
          '///////////////////////////////////////////////////////////////////////////////
          '//              ASP生成靜態
          '// 作    者:    杰之藍
          '// 版權所有:   
          www.52cfml.com
          '// 技術支持:    www.52cfml.com
          '// 開始時間:    2010-07-16
          '// 最后修改:   
          '// 備    注:   
          '///////////////////////////////////////////////////////////////////////////////

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

          '函數名:GetHttpPage
          '作 用:獲取網頁源碼
          '參 數:HttpUrl ------網頁地址,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()
           '循環等待數據接收
           Dim temp,BlockTimeout
           BlockTimeout = 64
           While (http.ReadyState <> 4)
           ' 判斷是否塊超時
              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
          %>

                  上述兩種方法都可以生成靜態文件,只不過每種方法的側重點不同,有需要的朋友可以根據自己的需要選擇相應的方法,當然真實環境下必須有數據庫的支持,由于本文只是例子,就沒有結合數據庫實現,有需要的朋友可以根據自己的需要建立相應的數據庫,對于方法一來說,模板變量的命名必須是前期定義好的。

                  希望對朋友們有所幫助。

          作者博客:www.52cfml.com

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

          評論

          # re: ASP專欄——ASP生成靜態文件  回復  更多評論   

          不錯,收藏了
          2010-07-29 16:28 | 160160

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 盐津县| 航空| 嘉禾县| 礼泉县| 南丰县| 香港| 武安市| 萨嘎县| 清原| 屯留县| 老河口市| 延寿县| 嫩江县| 枣庄市| 东至县| 云梦县| 资兴市| 富锦市| 海安县| 武邑县| 图木舒克市| 太保市| 凤庆县| 沾化县| 辽中县| 偏关县| 华亭县| 鹿邑县| 涡阳县| 贡嘎县| 太和县| 瑞丽市| 吕梁市| 灵宝市| 时尚| 南丰县| 泸溪县| 灵川县| 犍为县| 江达县| 松潘县|