刘继良
摘要:阐述了网站静态化的好处,介绍如何利用ASP、FSO和XMLHTTP生成静态网页的方法,利用该方法可以方便地创建静态网站。
关键词:ASP;静态网页;ADODB.Stream
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)22-5195-03
当今大型网站页面都改用了静态的页面,这是因为静态页面可以提高浏览速度,减轻服务器的负担,方便搜索引擎收录,网站更安全,静态页面从理论上讲是没有攻击漏洞的,基于以上的好处所以现在知名、主流的大站基本上都静下来了。
ASP(Active Server Pages)是 Web 的服务器端脚本编写环境,也是绝大多数从事网站开发人员很熟悉的编程环境。如何用asp生成静态网页一般有两种方法:1使用FSO生成,2使用XMLHTTP生成。下面将综合这两种方法来实现静态页的生成。
1 ASP生成静态页的方法
我们用标签替换的方法生成静态网页,做一个模版页mb.asp,生成静态页的时候直接把需要变化的部分的标签替换掉就行了。此例中我们把模板页mb.asp设置两个标签%title%和%content%。模板页可以是静态页也可以是动态页,但出于实际应用的方便我们用动态页做为模板页。静态网页执行页面为do.asp里面是具体生成静态页的代码。
2 程序中用到相关技术的方法和属性
1) Request.ServerVariables
Request.ServerVariables("Server_Name") 服务器的主机名、DNS地址或IP地址
Request.ServerVariables("Server_Port") 接受请求的服务器端口号
Request.ServerVariables("Path_Info") 客户端提供的路径信息
2) ADODB.Stream对象
mode 读写模式,可选值:1-读,2-写,3-读写
type 数据类型,可选值:1-二进制,2-文本
charset 编码方式,可选值:utf-8,gb2312
position 数据流位置,表示数据操作从这里开始,第一个位置的值为 0,不是 1。
size 数据流大小(字节)
LoadFromFile 从文件读取数据到 Stream 对象,Stream 对象原有内容将被清空
SaveToFile 将 Stream 对象数据保存为文件,第二个参数:1-不允许覆盖,2-覆盖写入
Open 打开数据流
Close 关闭数据流
Read([长度]) 从 Stream 对象中读取二进制数据,不指定长度表示全部读取
ReadText([长度])从 Stream 对象中读取文本数据,不指定长度表示全部读取
Write(buffer) 将缓存数据写入 Stream 对象
WriteText(data, [option]) 将文本数据写入 Stream 对象,第二个参数:0-字符写入,1-行写入
CopyTo(destStream, count) 将 Stream 对象的指定数据拷贝到 destStream
3) MSXML2.XMLHTTP对象
Open( bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword )
bstrMethod: 数据传送方式,即GET或POST。
bstrUrl: 服务网页的URL。
varAsync: 是否同步执行。缺省为True,即同步执行,但只能在DOM中实施同步执行。用中一般将其置为False,即异步执行。
bstrUser: 用户名,可省略。
bstrPassword:用户口令,可省略。
Send( varBody )
varBody:指令集。可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。也可以省略,让指令通过Open方法的URL参数代入。
readyState 返回当前请求的状态,只读.
3 生成静态页的主要代码
<%
‘函数部分
Function GetPageUrlPath()‘获取网站服务器地址函数
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) ‘获取发送请求网页内容的函数
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,"utf-8") ‘对获取的内容转码
set http=nothing
if err.number<>0 then err.Clear
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
function creatfile(filePath,nr)‘创建文件函数
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() 获取服务器地址
PageURL=SiteUrl & "mb.asp?time="&now() 得到模板页网址
ReplaceContent = getHTTPPage(PageURL) 取得模板页内容
title="这是标题"
content="这是内容"
ReplaceContent= replace(ReplaceContent,"%title%",title) 替换标签
ReplaceContent = replace(ReplaceContent,"%content%",content)
pagename=server.mappath("a.html") 要生成静态页的名字
call creatfile(pagename,ReplaceContent) 调用函数创建静态网页
response.Write "生成文件成功"
4 结束语
程序执行的结果是在网站的根目录下生成了一个a.html的网页,通过这个例子我们可以将动态网站的首页、列表页和文章页都变成静态页从而使网站更安全高效地运行。
参考文献:
[1] 尚俊杰.网络程序设计:ASP[M].北京:清华大学出版社,北京交通大学出版社,2009.
[2] 廖福保.基于ASP无组件图片上传技术的研究[J].微计算机应用,2006(1).