问题描述:
如题
希望有成熟的代码可以供我参考
解析:
以下代码就是将一个ASP的动态页面生成一个HTML的静态页面,注释我已经加上了,自己看吧。
FileName = "Index"&Item_Classid&""
FilePath = Server.MapPath("/")&"\"&FileName
_Temp = _Temp&FilePath&"</LI>"
以上代码是在建立最终生成静态文件的名称和路径。
Do_Url = ""
Do_Url = Do_Url&Request.ServerVariables("SERVER_NAME")&"/detail"
Do_Url = Do_Url&"?Item_Classid="&Item_Classid
strUrl = Do_Url
以上代码是通过拼写Do_Url字符串来获得你所传递过来的文件路径和参数,并最终附值到strUrl变量中。
dim objXmlHttp
set objXmlHttp = Server.CreateObject("Microsoft.XMLHTTP")
objXmlHttp.open "GET",strUrl,false
objXmlHttp.send()
以上这段代码是在通过你所传递过来的strUrl解析该页面中的HTML代码;关键是这句(objXmlHttp.open "GET",strUrl,false )。
Dim binFileData
binFileData = objXmlHttp.responseBody
以上代码是将解析好的HTML代码附到binFileData中
Dim objAdoStream
set objAdoStream = Server.CreateObject("ADODB.Stream")
objAdoStream.Type = 1
objAdoStream.Open()
objAdoStream.Write(binFileData)
objAdoStream.SaveToFile FilePath,2
objAdoStream.Close()
以上这段代码是建立一个文件对象,将所拥有HTML代码的变量binFileData写到该文件中。
_Temp = _Temp&"<UL>"
Response.Write _Temp
Response.Write ( "<BR>" )
Response.Write ( "成功生成文件:" )
以上几句就不用我解释了。。。。:)
其实上面这个做法并不是很科学,还可以将代码更完善些。建议你将这个步骤封装到两个FUNCTION中,这样比较清晰并且方便重复调用,
CreateFile:用于建立生成的静态文件,其中调用GetUrlText进行脚本解析。
Function CreateFile(fileName,url)
Dim fs,fname
Set fs = Server.CreateObject("Scripting.FileSystemObject")
Set fname = fs.CreateTextFile(FileName, True)
fname.Write GetUrlText(url)
fname.Close
Set fname = Nothing
Set fs = Nothing
End Function
GetUrlText:用语解析传递回来的ASP页面
Function GetUrlText(url)
Dim xmlHttp
Set xmlHttp = server.createobject("MSXML2.ServerXMLHTTP")
xmlHttp.setTimeouts 10000,10000,10000,30000
xmlHttp.Open "GET",url, False
xml.setRequestHeader "CONTENT-TYPE", "text/xml"
xmlHttp.Send
If xmlHttp.ReadyState = 4 Then
GetUrlText = xmlHttp.responseText
Else
GetUrlText = ""
End If
End Function
里面URL就是你传递过来的地址,而FileName就是生成文件的地址,你在调用时直接调用CreateFile,将FileName和URL传递过去就可以了,怎么样,是不是比上面的看起来清晰很多:)
实现的方法有两种,一种是假静态,采用地址重定向技术,iis服务器常用的有http重定向,url重写模块,microsoftURLrewrite具体可以百度更深入的了解一下。
一种是真静态,即把你页面所有不参与逻辑运算的静态框架用html写出来,比如页面布局。
在你的静态页面布局中插入要替换的逻辑运算字段,比如{#remen}字段。
后台写一个获取逻辑代码的程序,可以是逻辑运算的结果,或者html代码片段,然后替换掉你静态页面里的字段{#remen},那么你的静态页面里就得到了所想展示的结果和内容。
然后把整个静态页面用流的方式,写入到服务器的硬盘里,例如index.html,那么用户访问index.html就行了。
直接生成静态页面。这样做的好处是访客访问的页面是真实的静态页面,不再需要参与程序的实时逻辑运算得出结果,对页面速度是质的提升,同时也方便搜索引擎爬虫。
生成HTML方法主要步骤只有两个:一、获取要生成的html文件的内容
二、将获取的html文件内容保存为html文件
目前常用获取html文件的内容的方法有以下几种:
1、
str="<html标记>内容</html标记>"
str=str&"<html标记>内容</html标记><html标记>数据库读取内容....</html标记>....."
这种方法与是在脚本内写要生成的html内容,不太方便预览生成页面的内容,无法可视化布局页面,更改html模板时会更加复杂。
用这种方法的人很多,但我感觉这种方法是最不方便的。
2、 制作单独的HTML模板页,动态的内容用特定的字符作为标记(如:有人用$title$标记为网页标题),用ADODB.Stream或者Scripting.FileSystemObject将其模板内容载入,然后再用替换方法把原先定好的标记替换为动态内容
如:
Replace(载入的模板内容,"$title$",rs("title" ) )
3、 用XMLHTTP或serverXMLHTTP获取动态页所显示的HTML内容,
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)