您当前的位置是:首页-ASP教程

ASP+FSO+框架实现ASP批量生成HTML并分页的方法

【发表于】:2009/9/5 16:42:00  已被访问:164次
<!--#include file="conn.asp"-->’数据连接文件 
<% 
On Error Resume Next’容错处理 
Dim City’定义取得要生成页面的城市 
City=Request.Querystring("City")’获取生成的城市酒店值从框架传过来的在后面将介绍 
HtmlStartName=Request.Querystring("HtmlStartName")’获得生成htm文件名前缀 
Dim sql’搜索字符串,这里我就直接打开表不用搜索变量了,搜索条件按自己写就可以 
sql="Select * from Hotel where [City] = ’" & City & "’ " 
Dim oRs’数据操作对象 
Dim PageCounts’实现分页生成必须得知呀有多少页 
Set oRs = Server.CreateObject("ADODB.Recordset") 
oRs.Open Sql,oConn,1,1’找开酒店等于City变量的表 
oRs.pagesize=10’十个记录为一页 
PageCounts=oRs.pagecount’得出要生成多少个页面,循环生成使用 
Dim fs’定义fso文件对象 
Dim folders’存放生成静态页的文件夹名称 
Dim Filestart’定义生成htm文件前缀 
Set fs=Server.CreateObject("Scripting.FileSystemObject") 
Dim i 
for i=1 to PageCounts’开始循环生成页面,也就是分页生成了 
page=i 
oRs.absolutepage=i’页码 
rowcount=oRs.pagesize’当页记录数 
folders=server.mappath("CityHtml") 
if (fs.FolderExists(folders)) then’判断文件夹是否存在 
else 
fs.CreateFolder(folders)’不存在则创建CityHtml文件夹 
end if 
if i=1 then  
Filestart=HtmlStartName’如果为第一页则定义文件名为传值名.例如beijing则为beijing.htm 
else 
Filestart=HtmlStartName&i’如果第二页则为beijing+1例如有两页也就是i等于2则为 beijing2.htm如此类推...(.htm后缀就在后面加上) 
end if 
Dim files’定义生成文本文件名称变量 
Dim filez’定义文件路径名称变量 
files=Filestart&".txt"’本文件名称 
filez=folders&"\"&"files’文本文件路径 
’册除文件 
Dim checkfile’检查文本文件是否已经存在,是则删除 
checkfile=server.mappath("CityHtml\"&Filestart&".htm")’检查htm文件是否已经存在,是则删除 
if (fs.FileExists(checkfile)) then’检查htm文件是否已经存在,是则删除 
Dim df’定义文件对象*删除文件使用* 
Set df=fs.GetFile(checkfile)’定义要册除的文件 
df.Delete’册除文件 
end if’判断结束 
Dim ts’定义写入文件对象 
set ts = fs.createtextfile(filez,true) ’开启写入文件内容**我在正文只简单写入酒店名称和静态数字分页显示** 
ts.write("<Html><Head><Title>生成"&City&"城市酒店</Title>"&vbcrlf)’之后就是要生成的正文件内容了跟使用Response.write 
ts.write("<META http-equiv=Content-Type content=text/html; charset=gb2312>"&vbcrlf) 
ts.write("<meta name=keywords content="&city&"酒店>"&vbcrlf) 
ts.write("<link href=’/Style/style.css’ rel=’stylesheet’ type=’text/css’></head><body topmargin=0>"&vbcrlf) 
ts.Write("<TABLE WIDTH=760 cellspacing=0 cellpadding=0 align=center>"&vbcrlf&_ 
"<TR><TD width=’100%’>"&vbcrlf) 
’分页输出开始 
’数字分页程序原理在这我就不多说了,不懂的朋友可在网上搜索一下 
Dim page’当前页 
Dim Page2’数字分页变量 
Dim s’数字分页变量  
if page=1 then 
ts.write (" [首 页] [前一页] ") 
else 
ts.write (" <a href="&HtmlStartName&".htm"&" class=blue>[首 页]</a> <a href="&HtmlStartName&Replace(page-1,1,"")&".htm"&" class=blue>前一页</a> ") 
end if 
page2=(page-(page mod 10))/10 
if page2<1 then page2=0 
for s=page2*10-1 to page2*10+10 
if s>0 then 
if s=cint(page) then  
ts.write (" <font color=’#000000’>["& s & "]</font>") 
else 
if s=1 then 
ts.write (" <a href="&HtmlStartName&replace(s,1,"")&".htm"&" class=blue>["& s &"]</a>") 
else 
ts.write (" <a href="&HtmlStartName&s&".htm"&" class=blue>["& s &"]</a>") 
end if 
end if 
if s=ors.pagecount then 
exit for 
end if 
end if 
next 
if cint(page)=ors.pagecount then 
ts.write (" [后一页] [尾 页]") 
else 
ts.write (" <a href="&HtmlStartName&page+1&".htm"&" class=blue>[后一页]</a> <a href="&HtmlStartName&ors.pagecount&".htm"&" class=blue>[尾 页]</a>") 
end if  
ts.write("</TD></TR>") 
’分页输出结束 
do while not ors.eof and rowcount>0 ’输出酒店名称  
ts.write("<TR><TD width=’100%’>"&oRs.Fields("Chinese_Name")&"</TD></TR>"&vbcrlf) 
oRs.movenext  
rowcount=rowcount-1’当页记录数-1 loop 
ts.write("</Table></body></html>"&vbcrlf) 
ts.close 
set ts=nothing ’释放对象 
Dim EditFile’定义改写文件变量 
Set EditFile = fs.GetFile(filez)’设置改写文件对象 
EditFile.name= left(EditFile.name,len(EditFile.name)-4)&".htm" ’改写文本文件成htm 
next’循环生成结束(分页生成) 
set EditFile=nothing ’释放对象 
set fs=nothing’释放对象 
if err.number<>0 then ’处理生成错误 
Response.write (City&"更新时发生未知错误<A href=ToHtml.asp?City="&City&"&HtmlName="&HtmlStartName& ">重新更新</A>") 
else 
Response.Write(City&"酒店更新已完成 "&Now()) 
end if 
%> 




超长文章内容进行分页并生成HTML文件 
以下是程序源代码: 
<%  
dim fname,fso,fout,htmlcode  
dim htmlbody,htmlbody1,page_n  
htmlbody=request.form("body")  
page_n=len(htmlbody)-len(replace(htmlbody,"$",""))  
’生成文件名的函数  
function makefilename(fname)  
fname = fname  
fname = replace(fname,"-","")  
fname = replace(fname," ","")    
fname = replace(fname,":","")  
fname = replace(fname,"PM","")  
fname = replace(fname,"AM","")  
fname = replace(fname,"上午","")  
fname = replace(fname,"下午","")  
makefilename=fname  
end function  
if request.querystring("action")="add" then  
for i=0 to page_n  
fname=makefilename(now())  
if i=0 then  
ppage=0  
else  
ppage=i-1  
end if  
if i=0 and page_n>i then  
npage=i+1  
else  
npage=page_n  
end if  
shtml=split(htmlbody,"$")(i) & vbcrlf  
shtml=shtml&"<br><a href="""&fname&"_"&ppage&".html"">上一页</a> <a href="""&fname&"_"&npage&".html"">下一页</a>"  
Set fso = Server.CreateObject("Scripting.FileSystemObject")  
Set fout = fso.CreateTextFile(Server.MapPath(fname&"_"&i&".html"))  
fout.WriteLine shtml  
fout.close  
next  
response.write"<SCRIPT language=JavaScript>alert(’成功生成"&page_n+1&"个HTML页’);this.location.href=’Javascript:history.back();’</SCRIPT>"  
end if  
%>  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
<title>阿里西西_超长文件分页并生成HTML文件简单示例</title>  
</head>  
<body>  
<form name="form1" method="post" action="?action=add">  
文章内容:  
<br>  
<textarea name="body" cols="60" rows="8">  
第一页内容  
$  
第二页内容  
$  
第三页内容</textarea>  
<br>  
<input type="submit" name="Submit" value="提交">  
</form>  
</body>  
</html> 

SHTML和HTML的区别,如果用一句话来解释就是:SHTML 不是HTML而是一种服务器 API,shtml是服务器动态产成的html. 虽然两者都是超文本格式,但shtml是一种用于SSI技术的文件。 也就是Server Side Include--SSI 服务器端包含指令。 如果Web Server有SSI功能的话(大多数(尤其是基于Unix平台)的WEB服务器如Netscape Enterprise Server等均支持SSI命令)。 会对shtml文件特殊招待。 先扫一次shtml文件看没有特殊的SSI指令现在。 有就按Web Server设定规则解释SSI指令。 解释完后跟一般html一起掉去客户端。shtml 
  使用SSI(Server Side Include)的html文件扩展名,SSI(Server Side Include),通常称为"服务器端嵌入"或者叫"服务器端包含",是一种类似于ASP的基于服务器的网页制作技术。SSI工作原理:  将内容发送到浏览器之前,可以使用“服务器端包含 (SSI)”指令将文本、图形或应用程序信息包含到网页中。例如,可以使用 SSI 包含时间/日期戳、版权声明或供客户填写并返回的表单。对于在多个文件中重复出现的文本或图形,使用包含文件是一种简便的方法。将内容存入一个包含文件中即可,而不必将内容输入所有文件。通过一个非常简单的语句即可调用包含文件,此语句指示 Web 服务器将内容插入适当网页。而且,使用包含文件时,对内容的所有更改只需在一个地方就能完成。因为包含 SSI 指令的文件要求特殊处理,所以必须为所有 SSI 文件赋予 SSI 文件扩展名。默认扩展名是 .stm、.shtm 和 .shtmlWeb 服务器在处理网页的同时处理 SSI 指令。当 Web 服务器遇到 SSI 指令时,直接将包含文件的内容插入 HTML 网页。如果“包含文件”中包含 SSI 指令,则同时插入此文件。除了用于包含文件的基本指令之外,还可以使用 SSI 指令插入文件的相关信息(如文件的大小)或者运行应用程序或 shell 命令。 
  网站维护常常碰到的一个问题是,网站的结构已经固定,却为了更新一点内容而不得不重做一大批网页。SSI提供了一种简单、有效的方法来解决这一问题,它将一个网站的基本结构放在几个简单的HTML文件中(模板),以后我们要做的只是将文本传到服务器,让程序按照模板自动生成网页,从而使管理大型网站变得容易。所以,利用SHTML格式的页面目的和 ASP 差不多,但是因为是 API 所以运转速度更快,效率更高,比ASP快,比HTML慢,但由于可以使用服务器端包含,因此使页面更新容易(特别是批量更新banner,版权等),想象一下吧,你有一段 HTML,要在中间穿插一些特殊的服务端脚本,比如插入其他 HTML 段落,你选择 ASP 来完成这个任务,但是如果任务更繁重,需要更多的时间,比如 5 s,这个时候你不用 ASP 而用 SHTML,或许处理时间就只用 4 s 了. 
    其实说了这么多,对驼而言,用shtml最直接的就是可以用include~~
 
上下篇: 详谈ASP生成静态页面的方法 Asp获取当日文章并支持前一天后一天的方法

最新推荐信息