asp调用模板生成html要怎么做?
asp调用模板生成html要怎么做?
此篇文章也算不得我的原创,百度大神那里类似的文章一搜一大堆,咱也不争这个原创盗版,只是说一下我的思路,代码是什么不重要,重要的是解决问题的方法.
分析问题:asp生成html,为什么生成html,用什么方法生成,要怎么做.
先说为什么要生成html,其实这个真不用多讲,能看到这篇文章的人,都知道在几年前,人人追求的是动态网页,因为html文件是教定存在的,它不像xx.asp?id=xx这样是通过传值来达到获取数据库数据然后通过服务端发送给客户端浏览,换句话说,就是服务器没有数据库支持,html文件该显示什么还显示什么,这样看起来很好,在前些年,人们费尽心思想要的就是减轻客户机的压力,html文件的劣势就显示出来了,那些大型网站动辄就是成千上万个页面,如果全用html来做,那占用的空间岂不是太大.虽然减轻了服务器的负载,但是同样的,占用的体积那么大,资金花费也不小.但是现在,为了做好搜索引擎的收录,就是为了降低服务器的负载,就是要用到生成静态页.比如同一篇文章数据,一万个人同时请求,如果是html文件,简单,服务器:你请求了是吧,发给你好了.但是如果是动态页呢,它要先查询数据库记录,然后记录缓冲给浏览器,再显示给你,好了,你的解决了,剩下九千九百九十九人还要继续做一次这样的查询和输出,这样服务器的负载就太大了吧.这就是生成静态页的好处,现在谷歌,百度等搜索引擎早就无人不知无人不晓了,连小孩子都知道"内事不决问百度,外事不决问勾勾(谷歌)".而搜索引擎对于动态网页的收录效果很差,我们改变不了搜索引擎,就改变自己的网页吧...
要用什么方法生成:既然想到了要生成html,那就要想要用什么方法生成,使用VBScript的程序员就立刻想到了fso对象,我们可以通过fso来创建和写入html文件.用JavaScript的程序员基本上也是立刻就想到XMLHTTP,很明显我还是喜欢用fso来做demo.无他,唯手熟尔.
发现很多人只知道看此文,不去看代码,得,我在这把代码贴出..
<!--#include file="conn.asp"-->
<!--这个是引入数据库文件,不解释-->
<%
if request("style")="Make" then
'判断是否是生成html
'----------------------------------------------------
'打开文件过程函数
Function Openfile(url)
Dim fileurl,mfile,content,fso
fileurl = Server.MapPath(url)
Set Fso = Server.CreateObject("Scripting.Filesystemobject") '定义FSO
Set mfile = Fso.Opentextfile(fileurl,1) '以读的方式打开文件
If Not mfile.Atendofstream Then
content = mfile.readall() '读取全部内容
End If
mfile.Close
openfile = content
End Function
'----------------------------------------------------
'传说中的rs....不解释
Set rs=Server.CreateObject("ADODB.RecordSet")
sql="select * from Table_News order by sys_id desc" '这是我的数据库内的表名,请自行更改
rs.Open sql,conn,1,1
'----------------------------------------------------
'做个判断,本实例只是为了达到效果,请自行增加安全检测
rsnum = rs.recordcount '只为了做到能正常显示,读取数据库的所有数据总和
page=cint(request.form("page")) '取表单内的欲生成页面数
folder=trim(request.form("folder")) '表单内欲创建文件夹选项,注意,此处没做检测,具有安全隐患
'----------------------------------------------------
'简单判断下用户输入
if isnumeric(page) = false then
response.Write page&"非数字.请重新输入!"
response.End()
else
if page > rsnum then
page = rsnum
end if
end if
if page = "" then
page = rsnum
end if
'----------------------------------------------------
'简单判断是否用默认文件夹
if folder = "" then
folder = "news"
end if
'----------------------------------------------------
for i=1 to page
'这里开始处理变量,得到结果
'----------------------------------------------------
'下面的几个赋值变量我就不解释了吧?
keyword = rs("News_Keyword")
title = rs("News_Topic")
body = rs("News_Content")
bottom = rs("News_Time")
'删掉不用 start
'当时为了做上一篇 下一篇的演示,做了 $left和$right,可以不用
'----------------------------------------------------------
num = i '下面的几个验证是我无聊写上去的,可以删掉不用.
'分页验证
if i = page then
lefti = "没有了"
else
leftnum = num + 1
lefti="<a href='news-"&leftnum&".html' target='_Self'>第"&leftnum&"页</a>"
end if
if i <= 1 then
righti = "没有了"
else
rightnum = num - 1
righti="<a href='news-"&rightnum&".html' target='_Self'>第"&rightnum&"页</a>"
end if
'----------------------------------------------------------
'删掉不用 end
folder = Replace(folder,,"\/"&folder&"\/") '这里是要生成的文件存放的文件夹
Path = "news-"&id&".html" '欲生成文件的名称,本应当用ID来做显示,这里为了做demo,就用i了.
content = Openfile("temp.html") '模板的路径 'Openfile为自定义函数
'开始将模板的标签替换成变量
'----------------------------------------------------
'读出模板数据,替换内容,可无限替换.
content = Replace(content,"$keyword",keyword)
content = Replace(content,"$title",title)
content = Replace(content,"$body",body)
content = Replace(content,"$bottom",bottom)
content = Replace(content,"$left",lefti) '可删掉不用
content = Replace(content,"$right",righti) '可删掉不用,此处只是为了做上一篇下一篇的显示
'......无限替换 方法同 标签、变量,可以自定义
'----------------------------------------------------
'Fso操作开始
'----------------------------------------------------
Set Fso = Server.createObject("Scripting.FileSystemObject")
if not fso.folderexists(folder) then
fso.createfolder folder
else
Set Fout = FSO.CreateTextFile(Server.MapPath(folder&"/"&Path))
Fout.Write content
Fout.Close
end if
Set Fout = Nothing
'----------------------------------------------------
'这里做一下显示生成的页面
Response.Write("生成静态页成功 详情请<a href="&folder&"/"&Path&">点击查看</a> 这是第"&i&"页<br />")
'----------------------------------------------------
'rs指针移动下一条.如果数据不够自动结束循环.
rs.movenext
if rs.eof then exit for
next
Response.End()
'----------------------------------------------------
end if
%>
<title>模拟生成html</title>
<link rel="stylesheet" href="abc.css" type="text/css">
<script>
function aa(){
var oStyleSheet=document.styleSheets[0];
var oRule=oStyleSheet.rules[0];
if(oRule.style.visibility=="visible"){
oRule.style.visibility="hidden";
}else {
oRule.style.visibility="visible";
}
}
</script>
<form action="?Style=Make" method="post" onkeypress="this.submit">
<p style="text-align:center">
<select name="sec" onchange="aa();">
<option selected="selected">默认不选</option>
<option>根据ID生成</option>
</select>
</p>
<p id="shows">只生成:
<input name="page" type="text" size="5" maxlength="10" />
个html
更换文件夹<input name="folder" type="text" size="10" maxlength="10" />
<input type="submit" value="生成">
</p>
<p style="text-align:center" id="ss">
<input type="submit" value="一键生成全部" >
</p>
</form>
相应的注释已经添加,如果还看不懂....我实在没话说.