不用我再說ASP轉(zhuǎn)變成HTML的好處了吧,呵呵,其中最值得知道的就是:靜態(tài)頁比動態(tài)頁對服務器的壓力小得多,同時,靜態(tài)頁被搜索到的幾率比動態(tài)頁多得多。
廢話少說,現(xiàn)在就讓我們看看如何用ASP+模板生成HTML。
如何使得ASP頁面轉(zhuǎn)變?yōu)镠TML?一般都會想到FSO組件,因為該組件能新建任何文件格式。那么其整個運行過程是怎么樣的呢?我們可以把這個過程概括為一下三步:
a、提供信息輸入頁面進行信息采集;
b、接受信息值先保存到數(shù)據(jù)庫,再生成文件;
c、顯示剛被創(chuàng)建的HTML文件的路徑地址與其他相關信息,如:修改、刪除等。
該技術的實現(xiàn)過程中有如下幾個需要注意的問題:
i、FSO生成的文件是直接放在一個大文件夾下,還是單獨放在某個每日更新的子文件夾中?隨著時間的推移,通過FSO生成的文件會越來越多,管理壓力也會越來越大……通常你可能看到一些地址諸如http://www.abc.com/2004-5-20/200405201111.htm,通過分析可以得出應該是建立了當前日期的文件夾。這樣,一個文件夾的頁面內(nèi)容都屬于同一天并以當天的日期為文件夾名,查看、管理也就顯得比較簡單、合理。
ii、我們在試圖通過以上方法建立文件夾的時候,又發(fā)現(xiàn)了第二個問題。第一次通過FSO建立以當前日期命名的文件夾,沒有問題。當我在同一天有新的文件需要生成時,因為是同一個程序,所以,其又將會執(zhí)行建立同樣的文件夾,此時,F(xiàn)SO組件會發(fā)現(xiàn)該路徑已存在……卡殼! 因此,在這里我們應該首先添加一條判斷語句,來判斷一下文件夾是否存在,語句如下:
<%
‘如果文件夾不存在就創(chuàng)建
IF FileObject.FolderExists(Server.MapPath(Folder))=False Then
FileObject.CreateFolder Server.MapPath(Folder)
End If
%>
iii、文件夾是建立了,文件該如何建立呢?主要也就是文件名的生成,當然這個就需要自己來寫個函數(shù),功能就是如何生成文件名,語句如下:
<%
Function GetFileName(FileName)
FileName = FileName
FileName = replace(FileName,"-","")
FileName = replace(FileName," ","")
FileName = replace(FileName,":","")
FileName = replace(FileName,"PM","")
FileName = replace(FileName,"AM","")
FileName = replace(FileName,"上午","")
FileName = replace(FileName,"下午","")
GetFileName = FileName & ".htm"
End Function
%>
函數(shù)調(diào)用語句:
<%
FileName = GetFileName(now())
%>
其實,就是以年月日時分秒來命名的文件。
iv、最后,生成的文件該如何被查看、修改和刪除?這就需要把生成文件的相關的內(nèi)容都保存的數(shù)據(jù)庫中,這包括文件名,文件路徑,文件內(nèi)容等,這些問題在這里就不在多說了,相信學過ASP的人應該都會。
下面介紹如何把模板和FSO結(jié)合從而生成HTML。整個過程為:將模板中特殊代碼的值替換為從表單接受過來或者其他特定的值,完成模板功能;將最終替換過的所有模板代碼生成HTML文件。
模板的實現(xiàn)有兩種方法:一種是直接以文件的形式存在,使用的時候用FSO讀取文件,一種是把模板代碼保存在數(shù)據(jù)庫中,使用的時候從數(shù)據(jù)庫中讀出。本文推薦使用前一種方法,因為以文件形式存在的模板在設計時比較直觀,如果把文件保存為HTML格式,在設計時可以直接看到最終的界面,可以根據(jù)需要隨時更改。下面介紹用FSO讀取文件的過程,使用數(shù)據(jù)庫存儲的就不做介紹了,相信地球人都知道,呵呵,讀出文件后用Replace函數(shù)把模板中特殊代碼的值替換為從表單接受過來或者其他特定的值,將最終替換過的所有模板代碼生成HTML文件。
<%
‘下面首先讀取模板文件,將其中的全部代碼保存到一個字符串中
Dim strTemplate
Dim FileObject ‘聲明一個FileSystemObject對象實例
Set FileObject=Server.CreateObject("Scripting.FileSystemObject")
Dim TextFile ‘聲明一個TextStream對象實例
Set TextFile= FileObject.OpenTextFile(Server.MapPath("template.htm"))
strTemplate=TextFile.ReadAll ‘讀取整個文件
TextFile.Close
Set TextFile=Nothing ‘關閉TextStream對象
‘下面利用客戶輸入的內(nèi)容替換模板中的相應字符串
strTemplate=Replace(strTemplate,"$title$",Request.Form("Title"))
strTemplate=Replace(strTemplate,"$body$",Request.Form("Body"))
strTemplate=Replace(strTemplate,"$foot$",Request.Form("foot"))
‘下面生成HTML文件
Set TextFile= FileObject.CreateTextFile(Server.MapPath(FileName))
TextFile.Write strTemplate
Set TextFile=Nothing
%>
至此,HTML已經(jīng)生成,當然,我們在實際的操作中不會是這么簡單的模板,但原理是一樣的,無非是讀取了多個文件,替換了多個特殊字符而已。生成了HTML其實我們只完成了一半的任務,如果我們在瀏覽已經(jīng)生成的文件時發(fā)現(xiàn)有錯誤怎么辦,改,呵呵,這就需要我們在生成文件的同時還應該把采集的信息全部保存到數(shù)據(jù)庫,在修改時從數(shù)據(jù)庫讀出,修改完成后重新生成HTML覆蓋以前存在的文件,達到修改的目的,這個過程就是讀出數(shù)據(jù)然后重復上面的過程,但不同的是文件名是以前的并不是重新生成的,在這里就再重復了。當文章已經(jīng)沒有意義,我們想刪除怎么辦?這里一是要從數(shù)據(jù)庫里面把對應的記錄刪除,二是要把對應的文件刪除,下面給出刪除文件的代碼,數(shù)據(jù)庫記錄的刪除方法相信不用我在羅嗦了吧,呵呵
<%
‘FSO刪除文件函數(shù)
Public Function Del_File(FileName)
Set FSO = Server.Createobject("scripting.filesystemobject")
FileName = Server.Mappath(FileName)
If FSO.FileExists(FileName) then
FSO.DeleteFile(FileName)
End If
Set FSO=Nothing
End Function
%>
函數(shù)調(diào)用語句:
<%
Del_File(FileName)
%>
到這里,基本上用ASP+模板生成靜態(tài)HTML的方法就已經(jīng)介紹完了,這些只是一些簡單的示例,在實際應用中要比這些復雜的多,只要我們多想、多寫,就能夠舉一反三,熟練順利的寫出我們需要的文件了。