ASP生成静态网页技术的实现

2014-09-17 02:08:08刘继良
电脑知识与技术 2014年22期

刘继良

摘要:阐述了网站静态化的好处,介绍如何利用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).