桑三博客

电脑版
提示:原网页已由神马搜索转码, 内容由www.sangsan.cn提供.

asp生成静态页面html才常用方法

2010-04
11

       随着网站访问量的加大,每次从数据库读取都是以效率作为代价的,很多用ACCESS作数据库的更会深有体会,静态页加在搜索时,也会被优先考虑。互联网上流行的做法是将数据源代码写入数据库再从数据库读取生成静态面,这样无形间就加大了数据库。将现有的ASP页直接生成静态页,将会节省很多。
    
       下面的例子是将、index.asp?id=1/index.asp?id=2/index.asp?id=3/这三个动态页面,分别生成ndex1.htm,index2.htm,index3.htm存在根目录下面
    
    
    < %
     dim strUrl,Item_Classid,id,FileName,FilePath,Do_Url,Html_Temp
     Html_Temp="<UL>"
     For i=1 To 3
     Html_Temp = Html_Temp&"<LI>"
     Item_Classid = i
     FileName = "Index"&Item_Classid&".htm"
     FilePath = Server.MapPath("/")&"\"&FileName
     Html_Temp = Html_Temp&FilePath&"</LI>"
     Do_Url = "http://"
     Do_Url = Do_Url&Request.ServerVariables("SERVER_NAME")&"/main/index.asp"
     Do_Url = Do_Url&"?Item_Classid="&Item_Classid
     strUrl = Do_Url
     dim objXmlHttp
     set objXmlHttp = Server.CreateObject("Microsoft.XMLHTTP")
     objXmlHttp.open "GET",strUrl,false
     objXmlHttp.send()
     Dim binFileData
     binFileData = objXmlHttp.responseBody
     Dim objAdoStream
     set objAdoStream = Server.CreateObject("ADODB.Stream")
     objAdoStream.Type = 1
     objAdoStream.Open()
     objAdoStream.Write(binFileData)
     objAdoStream.SaveToFile FilePath,2
     objAdoStream.Close()
     Next
     Html_Temp = Html_Temp&"<UL>"
     %>
    < %
     Response.Write ( "成功生成文件:" )
     Response.Write ( "<BR>" )
     Response.Write Html_Temp
     %>
     --------------
    
     另一种方法
    
     ---------
    
     ASP生成静态页
    
    
    
    
    
     经过我在网上的搜索,似乎要避免fso生成静态页的可能性不大,但是,我顺便搜索了些生成静态页的教程
     希望大家用的着
    
    
    
     ASP生成静态网页的方法
    
       随着网站访问量的加大,每次从数据库读取都是以效率作为代价的,很多用ACCESS作数据库的更会深有体会,静态页加在搜索时,也会被优先考虑。互联网上流行的做法是将数据源代码写入数据库再从数据库读取生成静态面,这样无形间就加大了数据库。将现有的ASP页直接生成静态页,将会节省很多。
    
       下面的例子是将、index.asp?id=1/index.asp?id=2/index.asp?id=3/这三个动态页面,分别生成ndex1.htm,index2.htm,index3.htm存在根目录下面:
    
    < %
     dim strUrl,Item_Classid,id,FileName,FilePath,Do_Url,Html_Temp
     Html_Temp="<UL>"
     For i=1 To 3
     Html_Temp = Html_Temp&"<LI>"
     Item_Classid = i
     FileName = "Index"&Item_Classid&".htm"
     FilePath = Server.MapPath("/")&"\"&FileName
     Html_Temp = Html_Temp&FilePath&"</LI>"
     Do_Url = "http://"
     Do_Url = Do_Url&Request.ServerVariables("SERVER_NAME")&"/main/index.asp"
     Do_Url = Do_Url&"?Item_Classid="&Item_Classid
     strUrl = Do_Url
     dim objXmlHttp
     set objXmlHttp = Server.CreateObject("Microsoft.XMLHTTP")
     objXmlHttp.open "GET",strUrl,false
     objXmlHttp.send()
     Dim binFileData
     binFileData = objXmlHttp.responseBody
     Dim objAdoStream
     set objAdoStream = Server.CreateObject("ADODB.Stream")
     objAdoStream.Type = 1
     objAdoStream.Open()
     objAdoStream.Write(binFileData)
     objAdoStream.SaveToFile FilePath,2
     objAdoStream.Close()
     Next
     Html_Temp = Html_Temp&"<UL>"
     %>
    < %
     Response.Write ( "成功生成文件:" )
     Response.Write ( "<BR>" )
     Response.Write Html_Temp
     %>
    
    
     非摸板生成静态页
    
     目前已经有很多生成html的新闻系统,但是都是用的模板,本函数实现把asp页面产生的html代码保存成为一个html文件,这样就没有必要改动原来的页面就可以轻松完成一个生成html的新闻系统了。^_^
     由于代码比较短,这里就不进行注释了
    < %
     '当目标页面的包含文件即#i nclude的页面里边存在response.End()的时候本程序有问题
     '注意:本文件一定要放在filename指向的文件的同一目录下
     dim hughchiu_rtcode
     Function get_exe_code(filename)
     dim execode
     dim tmp_str
     Dim re,re1,content,fso,f,aspStart,aspEnd
     dim ms,m
     execode = ""
     set fso=CreateObject("Scripting.FileSystemObject")
     set f=fso.OpenTextFile(server.mappath(filename))
     content=f.ReadAll
     f.close
     set f=nothing
     set fso=nothing
    
     set re = new regexp
     re.ignorecase = true
     re.global = true
     re.pattern = "\<\%\@[^\%]+\%\>"
     content = re.replace(content,"")
    
     re.global = false
     re.pattern = "\<\!\-\-\s*\#i nclude\s*file\s*=\s*\""([^\""]+)\""\s*\-\-\>"
     do
     set ms = re.execute(content)
     if ms.count<>0 then
     set m = ms(0)
     tmp_str = get_exe_code(m.submatches(0))
     content = re.replace(content, tmp_str)
     else
     exit do
     end if
     loop
     set m = nothing
     set ms = nothing
    
     re.pattern="^\s*="
     aspEnd=1
     aspStart=inStr(aspEnd,content,"<%")+2
    
     set re1=new RegExp
     re1.ignorecase = true
     re1.global = false
     re1.pattern = "response\.Write(.+)"
    
     do while aspStart>aspEnd+1
     execode = execode&vbcrlf&" hughchiu_rtcode = hughchiu_rtcode&"""&replace( replace(Mid(content,aspEnd,aspStart-aspEnd-2),"""",""""""), vbcrlf, """&vbcrlf&""")&""""&vbcrlf
     aspEnd=inStr(aspStart,content,"%\>")+2
     tmp_str = Mid(content,aspStart,aspEnd-aspStart-2)
    
     do
     set ms = re1.execute(tmp_str)
     if ms.count<>0 then
     set m = ms(0)
     tmp_str = re1.replace(tmp_str, " hughchiu_rtcode = hughchiu_rtcode&"&m.submatches(0))
     else
     exit do
     end if
     loop
    
     set m = nothing
     set ms = nothing
    
     execode = execode& re.replace(tmp_str,"hughchiu_rtcode = hughchiu_rtcode&")
    
     aspStart=inStr(aspEnd,content,"<%")+2
     loop
    
     set re1 = nothing
     set re=nothing
    
     execode = execode&vbcrlf&" hughchiu_rtcode = hughchiu_rtcode&"""&replace( replace(Mid(content,aspEnd), """", """"""), vbcrlf, """&vbcrlf&""" )&""""&vbcrlf
     get_exe_code = "<%"&execode&"%\>"
     End Function
    
     function asp2html(filename)
     dim code
     code = replace( replace( replace( get_exe_code(filename), "hughchiu_rtcode = hughchiu_rtcode&"""""&vbcrlf, "" ), "<%", "" ), "%\>", "" )
     'response.Write(code)
     execute(code)
     'response.Write( hughchiu_rtcode )
     asp2html = hughchiu_rtcode
     end function
     %>
    
     使用范例:
     set fso=CreateObject("Scripting.FileSystemObject")
     set f=fso.CreateTextFile( server.mappath( "youpage.htm" ), true )
     f.WriteLine( asp2html("youpage.asp") )
     f.close
     set f = nothing
     set fso = nothing

 



评论: 0 | 引用: 0| 查看次数: 521
发表评论