捌玖网络工作室's Archiver

admin 发表于 2008-1-19 00:10

ASP生成静态Html文件技术汇总

网页生成静态Html文件有许多好处,比如生成html网页有利于被搜索引擎收录,不仅被收录的快还收录的全.前台脱离了数据访问,减轻对数据库访问的压力,加快网页打开速度.
Mu^;B%Y'xE 像[url]www.aspid.cn[/url]的主站就采用了TSYS生成html文件! *B9{G]-~"Rk
所以吟清最近对生成html比较感兴趣,看了不少文章,也有一点点收获.
;bS:Ce:]w5a5yy+Q 5M@uznYh8`,d/?
1,下面这个例子直接利用FSO把html代码写入到文件中然后生成.html格式的文件 <% O@"v L*wBhd
filename="test.htm" R3XC+Ng MX|? ]
if request("body")<>"" then
,q-s)Bl }%H&c;H;NJ set fso = Server.CreateObject("Scripting.FileSystemObject") p,Y(H4^ y!^2I
set htmlwrite = fso.CreateTextFile(server.mappath(""&filename&"")) O r}&F&K q+p
htmlwrite.write "<html><head><title>" & request.form("title") & "</title></head>"
6x~L:}}RlAq.| htmlwrite.write "<body>输出Title内容: " & request.form("title") & "<br /> 输出Body内容:" & request.form("body")& "</body></html>"
a ?)m|T.u!bYd htmlwrite.close B6E `+ugR}}
set fout=nothing !P8k8K}4c I8o
set fso=nothing
+M;p TSD5M)Sdw| end if
M N K*^ Lk %> "y-Mu D Kcn&E"l
<form name="form" method="post" action="">
:n C1tK!ra TW4F7U!]x <input name="title" value="Title" size=26>
7[+H*~:Q l,Q!u <br> mk U0z@!Huj8|+l7w
<textarea name="body">Body</textarea>
XH"S,}2y:P-g^~ <br>
Pa p*p&s*v <br>
| Tpi [2i <input type="submit" name="Submit" value="生成html">
qo jBQ'z </form> 6O6H Ur9]k:L}'H ~
2,但是按照上面的方法生成html文件非常不方便,第二种方法就是利用模板技术,将模板中特殊代码的值替换为从表单或是数据库字段中接受过来的值,完成模板功能;将最终替换过的所有模板代码生成HTML文件.这种技术采用得比较多,大部分的CMS都是使用这类方法.
'r a%y[a7e0?%H)T+O template.htm ' //模板文件 <html> ^!h~OMgJ
<head> &`~;MQ#m7Ms2i]
<title>$title$ by aspid.cn</title>
Q'LbC\ L Z!k </head> .S{u L aK!I9nfU
<body>
"Y'n0nA u,C1P1W $body$ ;xj'O Ou+AFC
</body>
9L0rrskz </html> ?
*kQ fK/fk g tE\~K&P4zs
TestTemplate.asp '// 生成Html <%
_~k/X4~-G Dim fso,htmlwrite
o|-O/O He^8m2D Dim strTitle,strContent,strOut H5w$a p,r0oRu3e
'// 创建文件系统对象
Jp,N;yYNr:rR K Set fso=Server.CreateObject("Scripting.FileSystemObject") ,J/hpp%E S u"R
'// 打开网页模板文件,读取模板内容
xEj.^DD Set htmlwrite=fso.OpenTextFile(Server.MapPath("Template.htm")) FH2AA ir
strOut=f.ReadAll [[2@1jk;j
htmlwrite.close
vI*nz7v
2GDrw kc-G)Zn strTitle="生成的网页标题"
1e:n-te`J1x3R9_ m strC ~)wM;p v7GS:V

}D8E,kX%IK '// 用真实内容替换模板中的标记
,y'_n? hR strOut=Replace(strOut,"$title$",strTitle)
.pE0C)p H strOut=Replace(strOut,"$body$",strContent)
zx9u]u.beJ
X"LK6^J6f;w a '// 创建要生成的静态页 M| A [ z(Im/MO1y&T
Set htmlwrite=fso.CreateTextFile(Server.MapPath("test.htm"),true)
q6^y"s-EA6nm(VO
r~P)J1Z5RF L '// 写入网页内容
%N8IC(j4p*nU+v#_ he htmlwrite.WriteLine strOut LtaE.FNwl ]V/k
htmlwrite.close Q#Zmx?!h
ZM8h.|G3Q
Response.Write "生成静态页成功!"
(WE)me,vBd
&D/D/eE [#@ '// 释放文件系统对象
/w'P)Q7o,u*\ t%k4w set htmlwrite=Nothing w/gkZpU1fc"Rd^~
set fso=Nothing _ ].ks5R*g
%>
J2w9R5@9h(k(O
j(M8T7w+[+v)X/}*k9a 3,第三种方法就是用XMLHTTP获取动态页生成的HTML内容,再用ADODB.Stream或者Scripting.FileSystemObject保存成html文件。这句话是在蓝色理想上看到的,对XMLHTTP吟清还不熟悉正在找资料了解.找到一段XMLHTTP生成Html的代码参考一下. 5S2r%FN?"BKT
<% [&R$~ Pm,IeTIj
Jk_3E?v!n\j1k
'常用函数
{@7X]m F^K(Y(x '1、输入url目标网页地址,返回值getHTTPPage是目标网页的html代码
*D,t*dX%`K;h function getHTTPPage(url)
B*s?B9Oq9K| dim Http
+lvVoLrY set Http=server.createobject("MSXML2.XMLHTTP") (?,h*C }k!}`l
Http.open "GET",url,false
5p@cfh2ob Http.send() nIzW[J(L
if Http.readystate<>4 then
x?,O_4W exit function
kK TqT8P? z8i end if
/c9AQ;J]I2k q5Ic"U getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312") z'P yw0k ph+] h;S[ Io
set http=nothing )EZy3XC}
if err.number<>0 then err.Clear -]Kx \5n6Y|BG{
end function
+y(wMz(I7[0?L
^$Dq AOl '2、转换乱玛,直接用xmlhttp调用有中文字符的网页得到的将是乱玛,可以通过adodb.stream组件进行转换 KcGK%Y
Function BytesToBstr(body,Cset)
h4Yz#a)WmU Ott dim objstream 7Hz }"S9EP
set objstream = Server.CreateObject("adodb.stream") ER1^D!TF;~)t ]
objstream.Type = 1 ;C6n Z't5h|*a \8@o
objstream.Mode =3 Lx h2r]d3_3m
objstream.Open +xc;^!X3f~
objstream.Write body
/~)]5o.?-l objstream.Position = 0 9M-cA]6eS|
objstream.Type = 2 3w jIt S @NF
objstream.Charset = Cset ~l:FT)|[6ye-Q-X%L
BytesToBstr = objstream.ReadText ?)e,_N3~Va \
objstream.Close
\/e5a Tb5vo set objstream = nothing
U2vcc0Gzn4Mv4W End Function
+?"E xJe~ QGr
d_h0W3Fuw (Z$A:VFB D eh
txtURL=server.MapPath("../index.asp") ~.?9g$I#M0s3@ C
Hl5gC$IQK
sText = getHTTPPage(txtURL)
k(w/m%y8Wp9S 4Ik,s[Cz)B;YF7wd
Set FileObject=Server.CreateObject("Scripting.FileSystemObject")
uY[2`sU;I filename="../index.htm" TL9mn.S:c`B
Set openFile=FileObject.OpenTextfile(server.mapPath(filename),2,true) 'true为不存在自行建立 4u*I `?%WnIQ9r$S$l
openFile.writeline(sText) sW6J nZ.a
Set OpenFile=nothing
[9aD7G0n C,y .KI;Zkd1M&b
%>
J/Tr kq'|] <script>
:nQ"D B"Z5Ap-IB alert("静态网页生成完毕");
I3DqAS~'Q0v~ history.back();
2K{"iy }4x E </script>

页: [1]
【捌玖网络】已经运行:


Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.