ASP開發之生成靜態HTML文件的方法比較
在ASP中,將動態頁面轉換生成靜態Html文件有許多好處,比如生成html網頁有利于被搜索引擎收錄(特別是對接受動態參數的頁面)。前臺訪問時,脫離了數據訪問,減輕對數據庫訪問的壓力,加快網頁打開速度。
當然,凡事有利必有弊,生成HTML頁面無形中也耗費大量的磁盤空間以存放這些靜態文件,在編輯頁面過程中除讀寫數據庫外,也要讀寫服務器磁盤,頁面樣式的改動必須重新生成全部HTML文件,等等。
像很多搜索引擎,都可以提交網站的頁面地址列表,動態文件的收錄問題已經不算是個問題了(如google sitemap)。得失就要自己衡量把握了,但無論如何,我們還是要懂得如何操作的。這里就引用一下別人的文章說明幾種常見的生成思路,供大家參考參考。
1、下面這個例子直接利用FSO把html代碼寫入到文件中然后生成.html格式的文件 。
這是最原始的,優點是簡單,缺點是頁面的修改不方便,我一般用到的地方是利用它生成整站參數文件。(通常網站如標題,名稱等配置保存在數據庫,我將它生成config.asp保存這些變量調用,避免頻繁訪問數據庫)
以下為引用的內容:
- <%
- 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內容: " & request.form("title") & "<br />
- 輸出Body內容:" & 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文件非常不方便,第二種方法就是利用模板技術,將模板中特殊代碼的值替換為從表單或是數據庫字段中接受過來的值,完成模板功能,將最終替換過的所有模板代碼生成HTML文件。這種技術采用得比較多,大部分的CMS都是使用這類方法。
以下為引用的內容:
- template.htm ' //模板文件
- <html>
- <head>
- <title>$title$ by webjx.com</title>
- </head>
- <body>
- $body$
- </body>
- </html>
- TestTemplate.asp '// 生成Html
- <%
- Dim fso,htmlwrite
- Dim strTitle,strContent,strOut
- '// 創建文件系統對象
- Set fso=Server.CreateObject("Scripting.FileSystemObject")
- '// 打開網頁模板文件,讀取模板內容
- Set htmlwrite=fso.OpenTextFile(Server.MapPath("Template.htm"))
- strOut=f.ReadAll
- htmlwrite.close
- strTitle="生成的網頁標題"
- strContent="生成的網頁內容"
- '// 用真實內容替換模板中的標記
- strOut=Replace(strOut,"$title$",strTitle)
- strOut=Replace(strOut,"$body$",strContent)
- '// 創建要生成的靜態頁
- Set htmlwrite=fso.CreateTextFile(Server.MapPath("test.htm"),true)
- '// 寫入網頁內容
- htmlwrite.WriteLine strOut
- htmlwrite.close
- Response.Write "生成靜態頁成功!"
- '// 釋放文件系統對象
- set htmlwrite=Nothing
- set fso=Nothing
- %>
3、第三種方法就是用XMLHTTP獲取動態頁生成的HTML內容,再用ADODB.Stream或者Scripting.FileSystemObject保存成html文件。找到一段XMLHTTP生成Html的代碼參考一下。
以下為引用的內容:
常用函數:
1、輸入url目標網頁地址,返回值getHTTPPage是目標網頁的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、轉換亂瑪,直接用xmlhttp調用有中文字符的網頁得到的將是亂瑪,可以通過adodb.stream組件進行轉換
- <%
- nction 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("靜態網頁生成完畢");
- history.back();
- </script>
小結,這三種方式是比較常用的生成HTML文件方法,我個比較喜歡使用第三種方式,因為頁面改動時非常方便,就算動態頁改動多大都好,只要重新用XMLHTTP讀取生成一次即可。
希望通過本文的介紹,能給你帶來幫助。
【編輯推薦】