劉繼良
摘要:闡述了網(wǎng)站靜態(tài)化的好處,介紹如何利用ASP、FSO和XMLHTTP生成靜態(tài)網(wǎng)頁的方法,利用該方法可以方便地創(chuàng)建靜態(tài)網(wǎng)站。
關(guān)鍵詞:ASP;靜態(tài)網(wǎng)頁;ADODB.Stream
中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1009-3044(2014)22-5195-03
當(dāng)今大型網(wǎng)站頁面都改用了靜態(tài)的頁面,這是因為靜態(tài)頁面可以提高瀏覽速度,減輕服務(wù)器的負(fù)擔(dān),方便搜索引擎收錄,網(wǎng)站更安全,靜態(tài)頁面從理論上講是沒有攻擊漏洞的,基于以上的好處所以現(xiàn)在知名、主流的大站基本上都靜下來了。
ASP(Active Server Pages)是 Web 的服務(wù)器端腳本編寫環(huán)境,也是絕大多數(shù)從事網(wǎng)站開發(fā)人員很熟悉的編程環(huán)境。如何用asp生成靜態(tài)網(wǎng)頁一般有兩種方法:1使用FSO生成,2使用XMLHTTP生成。下面將綜合這兩種方法來實現(xiàn)靜態(tài)頁的生成。
1 ASP生成靜態(tài)頁的方法
我們用標(biāo)簽替換的方法生成靜態(tài)網(wǎng)頁,做一個模版頁mb.asp,生成靜態(tài)頁的時候直接把需要變化的部分的標(biāo)簽替換掉就行了。此例中我們把模板頁mb.asp設(shè)置兩個標(biāo)簽%title%和%content%。模板頁可以是靜態(tài)頁也可以是動態(tài)頁,但出于實際應(yīng)用的方便我們用動態(tài)頁做為模板頁。靜態(tài)網(wǎng)頁執(zhí)行頁面為do.asp里面是具體生成靜態(tài)頁的代碼。
2 程序中用到相關(guān)技術(shù)的方法和屬性
1) Request.ServerVariables
Request.ServerVariables("Server_Name") 服務(wù)器的主機名、DNS地址或IP地址
Request.ServerVariables("Server_Port") 接受請求的服務(wù)器端口號
Request.ServerVariables("Path_Info") 客戶端提供的路徑信息
2) ADODB.Stream對象
mode 讀寫模式,可選值:1-讀,2-寫,3-讀寫
type 數(shù)據(jù)類型,可選值:1-二進制,2-文本
charset 編碼方式,可選值:utf-8,gb2312
position 數(shù)據(jù)流位置,表示數(shù)據(jù)操作從這里開始,第一個位置的值為 0,不是 1。
size 數(shù)據(jù)流大?。ㄗ止?jié))
LoadFromFile 從文件讀取數(shù)據(jù)到 Stream 對象,Stream 對象原有內(nèi)容將被清空
SaveToFile 將 Stream 對象數(shù)據(jù)保存為文件,第二個參數(shù):1-不允許覆蓋,2-覆蓋寫入
Open 打開數(shù)據(jù)流
Close 關(guān)閉數(shù)據(jù)流
Read([長度]) 從 Stream 對象中讀取二進制數(shù)據(jù),不指定長度表示全部讀取
ReadText([長度])從 Stream 對象中讀取文本數(shù)據(jù),不指定長度表示全部讀取
Write(buffer) 將緩存數(shù)據(jù)寫入 Stream 對象
WriteText(data, [option]) 將文本數(shù)據(jù)寫入 Stream 對象,第二個參數(shù):0-字符寫入,1-行寫入
CopyTo(destStream, count) 將 Stream 對象的指定數(shù)據(jù)拷貝到 destStream
3) MSXML2.XMLHTTP對象
Open( bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword )
bstrMethod: 數(shù)據(jù)傳送方式,即GET或POST。
bstrUrl: 服務(wù)網(wǎng)頁的URL。
varAsync: 是否同步執(zhí)行。缺省為True,即同步執(zhí)行,但只能在DOM中實施同步執(zhí)行。用中一般將其置為False,即異步執(zhí)行。
bstrUser: 用戶名,可省略。
bstrPassword:用戶口令,可省略。
Send( varBody )
varBody:指令集??梢允荴ML格式數(shù)據(jù),也可以是字符串,流,或者一個無符號整數(shù)數(shù)組。也可以省略,讓指令通過Open方法的URL參數(shù)代入。
readyState 返回當(dāng)前請求的狀態(tài),只讀.
3 生成靜態(tài)頁的主要代碼
<%
‘函數(shù)部分
Function GetPageUrlPath()‘獲取網(wǎng)站服務(wù)器地址函數(shù)
SERVER_NAME = Request.ServerVariables("SERVER_NAME")
SERVER_PORT = Request.ServerVariables("SERVER_PORT")
PATH_INFO = Request.ServerVariables("PATH_INFO")
PATH_TMP = Split(PATH_INFO,"/")
PATH_INFO = Replace(PATH_INFO,PATH_TMP(Ubound(PATH_TMP)),"")
URL = "http://" & SERVER_NAME
If SERVER_PORT<>80 Then URL = URL & ":" & SERVER_PORT
URL = URL & PATH_INFO
GetPageUrlPath = URL
End Function
function getHTTPPage(url) ‘獲取發(fā)送請求網(wǎng)頁內(nèi)容的函數(shù)
dim Http
set Http=server.createobject("MSXML2.XMLHTTP")
Http.open "GET",url,false ‘設(shè)定向目標(biāo)網(wǎng)頁發(fā)送請求的方式
Http.send()
if Http.readystate<>4 then
exit function
end if
getHTTPPage=bytesToBSTR(Http.responseBody,"utf-8") ‘對獲取的內(nèi)容轉(zhuǎn)碼
set http=nothing
if err.number<>0 then err.Clear
end function
Function BytesToBstr(body,Cset) ‘轉(zhuǎn)換編碼函數(shù)
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
function creatfile(filePath,nr)‘創(chuàng)建文件函數(shù)
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = 2
objStream.Mode = 3
objStream.Open
objStream.Charset = "utf-8"
objStream.Position = objStream.Size
objStream.WriteText=nr
objStream.SaveToFile filePath,2
objStream.Close
Set objStream = Nothing
end function
'代碼部分
SiteUrl = GetPageUrlPath() 獲取服務(wù)器地址
PageURL=SiteUrl & "mb.asp?time="&now() 得到模板頁網(wǎng)址
ReplaceContent = getHTTPPage(PageURL) 取得模板頁內(nèi)容
title="這是標(biāo)題"
content="這是內(nèi)容"
ReplaceContent= replace(ReplaceContent,"%title%",title) 替換標(biāo)簽
ReplaceContent = replace(ReplaceContent,"%content%",content)
pagename=server.mappath("a.html") 要生成靜態(tài)頁的名字
call creatfile(pagename,ReplaceContent) 調(diào)用函數(shù)創(chuàng)建靜態(tài)網(wǎng)頁
response.Write "生成文件成功"
4 結(jié)束語
程序執(zhí)行的結(jié)果是在網(wǎng)站的根目錄下生成了一個a.html的網(wǎng)頁,通過這個例子我們可以將動態(tài)網(wǎng)站的首頁、列表頁和文章頁都變成靜態(tài)頁從而使網(wǎng)站更安全高效地運行。
參考文獻:
[1] 尚俊杰.網(wǎng)絡(luò)程序設(shè)計:ASP[M].北京:清華大學(xué)出版社,北京交通大學(xué)出版社,2009.
[2] 廖福保.基于ASP無組件圖片上傳技術(shù)的研究[J].微計算機應(yīng)用,2006(1).