Board logo

标题: ASP生成静态Html文件技术汇总 [打印本页]

作者: admin    时间: 2008-1-19 00:10     标题: ASP生成静态Html文件技术汇总

网页生成静态Html文件有许多好处,比如生成html网页有利于被搜索引擎收录,不仅被收录的快还收录的全.前台脱离了数据访问,减轻对数据库访问的压力,加快网页打开速度.
/ n" R5 n, u( {9 C, K+ A* _www.aspid.cn的主站就采用了TSYS生成html文件!
) Z+ K1 q* g2 f2 y- V) {所以吟清最近对生成html比较感兴趣,看了不少文章,也有一点点收获.
5 D9 j" f; R8 I9 s) ]+ c' u7 _/ Z: v/ v5 q3 N6 s. R0 p
1,下面这个例子直接利用FSO把html代码写入到文件中然后生成.html格式的文件 <%
% @: e, r3 [3 g$ q7 Afilename="test.htm"
1 R( v( x3 R; W  v0 @2 Zif request("body")<>"" then
5 F/ P& ~8 i1 O! v& t1 b2 t1 Bset fso = Server.CreateObject("Scripting.FileSystemObject") 7 b) R+ K( W& L
set htmlwrite = fso.CreateTextFile(server.mappath(""&filename&""))
) \. G. p* o% j; Fhtmlwrite.write "<html><head><title>" & request.form("title") & "</title></head>" ' T2 p4 g7 L$ A6 A5 A+ |
htmlwrite.write "<body>输出Title内容: " & request.form("title") & "<br /> 输出Body内容:" & request.form("body")& "</body></html>"
9 g9 |) w/ w) O7 P% h2 fhtmlwrite.close
& J" r5 A$ v! s' h" zset fout=nothing
% d6 b4 {# |4 ^5 A7 h+ \4 zset fso=nothing 9 P/ I6 U% A4 Q/ F  @4 Q& P
end if
" _0 Q. m3 D7 z. ~. m/ O%>
+ }* q& z+ P9 a* x' k# o9 F<form name="form" method="post" action=""> ! Z" p5 J3 F- g8 a4 V4 C! L5 t
<input name="title" value="Title" size=26> $ U$ Y8 {% D4 d' i' ?7 \9 s
<br>
  Z! ]3 @* }1 ]1 E<textarea name="body">Body</textarea> ; S+ P: A3 K: Q% ?' ^; Y7 \+ F
<br> 7 L) f4 o2 G8 T5 Y' R  p9 C/ A
<br>
  Z6 B! c& v7 O2 V3 f9 P8 V<input type="submit" name="Submit" value="生成html">
% S9 ^  F5 g% ]; I3 E( I</form>
* [9 c! C* l2 p# J2,但是按照上面的方法生成html文件非常不方便,第二种方法就是利用模板技术,将模板中特殊代码的值替换为从表单或是数据库字段中接受过来的值,完成模板功能;将最终替换过的所有模板代码生成HTML文件.这种技术采用得比较多,大部分的CMS都是使用这类方法.
4 l; T  H3 t$ t9 a/ utemplate.htm ' //模板文件 <html> 3 a0 r6 f$ i4 e$ l  x- x
<head>
5 y7 w7 ~' p: ^, M+ V/ _<title>$title$ by aspid.cn</title> + }( }3 g3 i8 K, e% G% [3 }8 g+ @* }2 h+ @8 ]
</head>
5 @+ }; R' S/ D" p/ Y; V<body> 9 |" ^# t5 x8 \# |# s* B6 S
$body$
6 x4 k1 y, p2 J: \2 a3 L, K</body> 3 p1 d2 R4 D  `0 B- J0 f- ~
</html> ?
' }6 g1 w3 \8 s  M3 D" q- h& K+ `" C# s* a- z/ B5 O
TestTemplate.asp '// 生成Html <%
& e! d4 S( Y3 n5 j' qDim fso,htmlwrite - I7 \2 J" v( \' E7 i7 V
Dim strTitle,strContent,strOut
- R6 e5 n6 C( h" u; r) G'// 创建文件系统对象
" a7 ~8 c5 q0 X& U* Y! ]/ HSet fso=Server.CreateObject("Scripting.FileSystemObject") ; o. Z8 F2 F! V) S
'// 打开网页模板文件,读取模板内容
7 I( E$ N# O& CSet htmlwrite=fso.OpenTextFile(Server.MapPath("Template.htm")) ! N3 h, i4 I$ s0 |" C. V$ M8 b
strOut=f.ReadAll * s" F2 j& p% E& B7 q" X  P3 b; `
htmlwrite.close : @3 `) y& L% i% {& Y7 f4 W! c

* I/ l( [+ ]2 M  a5 P7 HstrTitle="生成的网页标题" - \9 l3 y4 r# T% f. ^: D
strC # k7 _+ j7 I5 ]% g0 X

& h' G6 j/ j7 s'// 用真实内容替换模板中的标记
% Y8 B5 X# r3 bstrOut=Replace(strOut,"$title$",strTitle)
7 N; j' s" h% w: astrOut=Replace(strOut,"$body$",strContent)
/ E% w1 e3 Q4 M$ o5 Y4 w
! b& T$ @; A# }3 G% }4 c; u) y'// 创建要生成的静态页
8 e0 k4 r1 a* r% j: r% T0 v; y% hSet htmlwrite=fso.CreateTextFile(Server.MapPath("test.htm"),true)
, K( X" S  `8 @3 x, x+ U5 T
9 @, l% @0 W1 e& y'// 写入网页内容 6 J( G% q9 J' E
htmlwrite.WriteLine strOut 5 X4 t7 P8 B- D
htmlwrite.close
4 B6 n, n+ w* \9 Q
# B/ I# X! q2 Z' T& y* |3 @, k) |Response.Write "生成静态页成功!"
) B6 b; B( h4 N, s# M% s- L7 D& ]4 P( Z+ _( \
'// 释放文件系统对象
/ x/ a: ^- ^: |" ]5 z* h8 ?* \set htmlwrite=Nothing
# G2 X6 a  g& Z4 q+ Vset fso=Nothing # o: p/ h- ^) W
%>
8 d" g( f+ m! H' D
; J9 P, h$ m1 x% ~: _3,第三种方法就是用XMLHTTP获取动态页生成的HTML内容,再用ADODB.Stream或者Scripting.FileSystemObject保存成html文件。这句话是在蓝色理想上看到的,对XMLHTTP吟清还不熟悉正在找资料了解.找到一段XMLHTTP生成Html的代码参考一下. / B4 n7 y$ @0 g: E! c0 }2 n4 g/ P! F
<% 2 M/ U/ B$ s8 [; s
  e/ ~: o9 H, S/ \. n
'常用函数 , c6 p& }" B* A1 |6 e2 w
'1、输入url目标网页地址,返回值getHTTPPage是目标网页的html代码 9 k3 W! J4 e" `6 u- |' u7 o2 D+ S
function getHTTPPage(url) ) K# e7 V5 u/ k2 F# U, A+ I
dim Http - g5 F: X% P+ ~  x
set Http=server.createobject("MSXML2.XMLHTTP")
3 W" G5 s$ z0 hHttp.open "GET",url,false 9 O! P0 w, T- k& z8 N1 s: L
Http.send() $ x$ H9 `2 |& a% A$ P
if Http.readystate<>4 then
" `0 M) E/ E1 j5 j- R0 g7 |8 y. q) j% {exit function * ~0 B: W8 `. C) P2 ]* ]7 T9 M
end if 9 w( E2 H, h* \& ^! h* b, z4 J/ K; P
getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")
& S. _: h: ~6 Zset http=nothing 6 u. w, i* x+ b  v- p
if err.number<>0 then err.Clear 7 w4 {+ i: I9 E6 b' s
end function ( v# w# y- U5 H8 N1 H( L/ R$ ^

, Z" R1 I1 M+ A6 G'2、转换乱玛,直接用xmlhttp调用有中文字符的网页得到的将是乱玛,可以通过adodb.stream组件进行转换
2 X# d! [. x* h$ [Function BytesToBstr(body,Cset) 0 Z% U; T1 t% l1 g; r
dim objstream . a, d; F: F  W2 h, ]1 O
set objstream = Server.CreateObject("adodb.stream") ; V1 @- Y0 s: x
objstream.Type = 1 ) m) M( i3 g9 _# z) g. q, D
objstream.Mode =3 $ t+ M; D9 k2 f
objstream.Open ; C! Z1 E" z0 B0 m3 f
objstream.Write body
, g& ]4 s( P- ]) Zobjstream.Position = 0 & ]# o! x) l/ F2 o- g2 V0 v4 J
objstream.Type = 2
' n/ D2 \6 y2 @" L& P) |! q( K% robjstream.Charset = Cset 6 X8 u( v  ]7 k9 Z# |
BytesToBstr = objstream.ReadText
3 c6 K- _% X' Y4 gobjstream.Close $ {7 P. S! I" B
set objstream = nothing " a0 U4 h9 {9 r/ h
End Function
3 v$ i, U* D& S" S" t! y+ n, p! j3 p- b5 }4 I; L
( h/ Q6 R1 J& H( ]
txtURL=server.MapPath("../index.asp") ' E: V1 K& V5 ~0 u- [0 a
  c  N/ K2 l$ n, Y3 C' b- F' a
sText = getHTTPPage(txtURL)   C$ O% b* C  x8 R4 R7 c8 s: O
  r* f+ N" }" d. e" b6 A9 e1 x' o. o
Set FileObject=Server.CreateObject("Scripting.FileSystemObject") 9 c3 _! f5 S6 G; C) N/ F4 K7 N
filename="../index.htm" 1 j& s- D, C) @
Set openFile=FileObject.OpenTextfile(server.mapPath(filename),2,true) 'true为不存在自行建立 8 \  F/ |8 C0 s) y4 E
openFile.writeline(sText) # L6 d) |* H0 {) O7 N- N
Set OpenFile=nothing   g3 e8 g: M  G" F$ C" t
8 y1 E5 K# k7 h% V8 j' G; \) o+ A
%>
8 ^. i2 Z! [3 N5 Q0 d' k<script> 0 \* Z6 {, z/ w# d. u4 h
alert("静态网页生成完毕"); - b1 t0 s" Z0 K
history.back();
+ q" P' Y1 E  s</script>




欢迎光临 捌玖网络工作室 (http://www.89w.org/) Powered by Discuz! 7.2