比較ASP生成靜態(tài)HTML文件的幾種方法_ASP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:關(guān)于Asp代碼與頁面的分離
      為了避免ASP程TML代碼混寫造成維護(hù)困難的情況,本文介紹了一種方法,利用模板來分離程序和頁面,使程序設(shè)計(jì)更加輕松。 在使用ASP制作一個(gè)站點(diǎn)的時(shí)候,常常會(huì)出現(xiàn)一個(gè)ASP文件中,程序代碼和HTM

      將動(dòng)態(tài)頁面轉(zhuǎn)換生成靜態(tài)Html文件有許多好處,比如生成html網(wǎng)頁有利于被搜索引擎收錄(特別是對(duì)接受動(dòng)態(tài)參數(shù)的頁面)。前臺(tái)訪問時(shí),脫離了數(shù)據(jù)訪問,減輕對(duì)數(shù)據(jù)庫訪問的壓力,加快網(wǎng)頁打開速度。

      當(dāng)然,凡事有利必有弊,生成HTML頁面無形中也耗費(fèi)大量的磁盤空間以存放這些靜態(tài)文件,在編輯頁面過程中除讀寫數(shù)據(jù)庫外,也要讀寫服務(wù)器磁盤,頁面樣式的改動(dòng)必須重新生成全部HTML文件,等等。

      像很多搜索引擎,都可以提交網(wǎng)站的頁面地址列表,動(dòng)態(tài)文件的收錄問題已經(jīng)不算是個(gè)問題了(如google sitemap)。得失就要自己衡量把握了,但無論如何,我們還是要懂得如何操作的。這里就引用一下別人的文章說明幾種常見的生成思路,供大家參考參考。

      1、下面這個(gè)例子直接利用FSO把html代碼寫入到文件中然后生成.html格式的文件 。這是最原始的,優(yōu)點(diǎn)是簡(jiǎn)單,缺點(diǎn)是頁面的修改不方便,我一般用到的地方是利用它生成整站參數(shù)文件。(通常網(wǎng)站如標(biāo)題,名稱等配置保存在數(shù)據(jù)庫,我將它生成config.asp保存這些變量調(diào)用,避免頻繁訪問數(shù)據(jù)庫)

      以下為引用的內(nèi)容:

      <%
      filename="test.htm"
      if request("body")<>"" then
      set fso = Server.CreateObject("Scripting.FileSystemObject")
      set htmlwrite = fso.CreateTextFile(server.mappath(""&filename&""))
      htmlwrite.write "<html><head><title>" & request.form("title") & "</title></head>"
      htmlwrite.write "<body>輸出Title內(nèi)容: " & request.form("title") & "<br /> 輸出Body內(nèi)容:" & request.form("body")& "</body></html>"
      htmlwrite.close
      set fout=nothing
      set fso=nothing
      end if
      %>
      <form name="form" method="post" action="">
      <input name="title" value="Title" size=26>
      <br>
      <textarea name="body">Body</textarea>
      <br>
      <br>
      <input type="submit" name="Submit" value="生成html">
      </form>

      2、但是按照上面的方法生成html文件非常不方便,第二種方法就是利用模板技術(shù),將模板中特殊代碼的值替換為從表單或是數(shù)據(jù)庫字段中接受過來的值,完成模板功能,將最終替換過的所有模板代碼生成HTML文件。這種技術(shù)采用得比較多,大部分的CMS都是使用這類方法。

      以下為引用的內(nèi)容:

      template.htm ' //模板文件
      <html>
      <head>
      <title>$title$ by mb5u.com</title>
      </head>
      <body>
      $body$
      </body>
      </html>
      TestTemplate.asp '// 生成Html
      <%
      Dim fso,htmlwrite
      Dim strTitle,strContent,strOut
      '// 創(chuàng)建文件系統(tǒng)對(duì)象
      Set fso=Server.CreateObject("Scripting.FileSystemObject")
      '// 打開網(wǎng)頁模板文件,讀取模板內(nèi)容
      Set htmlwrite=fso.OpenTextFile(Server.MapPath("Template.htm"))
      strOut=f.ReadAll
      htmlwrite.close
      strTitle="生成的網(wǎng)頁標(biāo)題"
      strContent="生成的網(wǎng)頁內(nèi)容"
      '// 用真實(shí)內(nèi)容替換模板中的標(biāo)記
      strOut=Replace(strOut,"$title$",strTitle)
      strOut=Replace(strOut,"$body$",strContent)
      '// 創(chuàng)建要生成的靜態(tài)頁
      Set htmlwrite=fso.CreateTextFile(Server.MapPath("test.htm"),true)
      '// 寫入網(wǎng)頁內(nèi)容
      htmlwrite.WriteLine strOut
      htmlwrite.close
      Response.Write "生成靜態(tài)頁成功!"
      '// 釋放文件系統(tǒng)對(duì)象
      set htmlwrite=Nothing
      set fso=Nothing
      %>

      3、第三種方法就是用XMLHTTP獲取動(dòng)態(tài)頁生成的HTML內(nèi)容,再用ADODB.Stream或者Scripting.FileSystemObject保存成html文件。找到一段XMLHTTP生成Html的代碼參考一下。

      以下為引用的內(nèi)容:

      <%
      '常用函數(shù)
      '1、輸入url目標(biāo)網(wǎng)頁地址,返回值getHTTPPage是目標(biāo)網(wǎng)頁的html代碼
      function getHTTPPage(url)
      dim Http
      set Http=server.createobject("MSXML2.XMLHTTP")
      Http.open "GET",url,false
      Http.send()
      if Http.readystate<>4 then
      exit function
      end if
      getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")
      set http=nothing
      if err.number<>0 then err.Clear
      end function

      '2、轉(zhuǎn)換亂瑪,直接用xmlhttp調(diào)用有中文字符的網(wǎng)頁得到的將是亂瑪,可以通過adodb.stream組件進(jìn)行轉(zhuǎn)換

      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
      txtURL=server.MapPath("../index.asp")
      sText = getHTTPPage(txtURL)
      Set FileObject=Server.CreateObject("Scripting.FileSystemObject")
      filename="../index.htm"
      Set openFile=FileObject.OpenTextfile(server.mapPath(filename),2,true) 'true為不存在自行建立
      openFile.writeline(sText)
      Set OpenFile=nothing
      %>
      <script>
      alert("靜態(tài)網(wǎng)頁生成完畢");
      history.back();
      </script>

      小結(jié),這三種方式是比較常用的生成HTML文件方法,我個(gè)比較喜歡使用第三種方式,因?yàn)轫撁娓膭?dòng)時(shí)非常方便,就算動(dòng)態(tài)頁改動(dòng)多大都好,只要重新用XMLHTTP讀取生成一次即可。

      分享:WEB應(yīng)用的緩存兼容性設(shè)計(jì)
      經(jīng)過代理以后,由于在客戶端和服務(wù)之間增加了中間層,因此服務(wù)器無法直接拿到客戶端的IP,服務(wù)器端應(yīng)用也無法直接通過轉(zhuǎn)發(fā)請(qǐng)求的地址返回給客戶端。但是在轉(zhuǎn)發(fā)請(qǐng)求的HTTD頭信息中,增加了HTTP_X

      來源:模板無憂//所屬分類:ASP教程/更新時(shí)間:2008-08-22
      相關(guān)ASP教程