生成html页面的思路问题

fisherboy 2008-04-15 10:38:56
搞ASP搞了3年,现在需要做生成HTML静态页面。
刚接触,问几个问题。主要是希望大家给个思路!


1,除了提高浏览速度,把页面生成为html有什么好处?

举一个常见的例子,一个新闻系统需要做全站(前台)静态的。它有首页index.html,分页NewsList.html,详细页NewsShow.html。

首页生成简单,我想问:
2,每个详细页面生成为静态页面的时候,
(1),往往头部都包含小导航,如:首页>公司新闻>公司文化,还有页面旁边有“热点新闻、相关新闻”“广告”等,除了主体部分,这些原来用ASP实现时都是动态变化的,现在做成静态的,怎么办?假如相关新闻有变动,那是不是当前这个详细页面需要重新生成一次?
(2),当编辑文章时,是不是要重新生成一次?
3,分页显示的时候
(1),同样含有问题2-1的问题
(2),假设总共有3页,每页10记录,假设记录不增加不减少。假设每个页面只显示文章标题。如果某个文章标题改变了,那么是不是它所属那个页面(如NewsList3.html)要重新生成一次?
(3),假设总共有3页,每页10记录。如果记录有增或者减少,那么各个分页(如:NewsList1.html,NewsList2.html,NewsList3.html)是不是都需要重新生成?因为有可能NewsList3.html这个页面里需要显示的文章又多了一条或者少了一条。
(4),页面下面经常会带有[1][2][3][4]等分页链接。如果增加或者减少了记录,那么总页数有可能增加,意思是有可能总共有5页或者2页了。那么各个分页是不是又必须重新生成一次?首页末页问题,假设原来只有3页,末页是NewsList3.html,现在可能增加了很多记录,末页变成NewsList100.html了,如果以前生成过99个页面,那是不是99个页面的末页都必须改成NewsList100.html,必须重新生成?
(5),怎么区分已经生成过的?将要生成的?
4,是不是每次修改数据库,都必须全盘通通重新生成一次?
...全文
219 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
codeshark 2008-04-16
1,建立新数据库asp2html.mdb
2,设计新数据库表c_moban
字段m_id(自动编号,主关键字);字段m_html(备注类型)。
并将下列完整的代码拷贝至m_html字段

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=hz">
<title>Cnbruce.Com | ASP2HTML TEST</title>
</head>
<body leftmargin="0" topmargin="0">
<table width="100%" height="100%" border="0" cellpadding="5" cellspacing="2">
<tr align="right" bgcolor="#CCCCCC">
<td height="20" colspan="2">$cntop{LogContent}lt;/td>
</tr>
<tr valign="top">
<td width="25%" bgcolor="#e5e5e5">$cnleft{LogContent}lt;/td>
<td width="74%" bgcolor="#f3f3f3">$cnright{LogContent}lt;/td>
</tr>
</table>
</body>
</html>

3,设计新数据库表c_news
字段c_id:自动编号,主关键字
字段c_title:文本类型,保存文章标题
字段c_content:备注类型,保存文章内容
字段c_filepath:文本类型,保持生成文件的路径地址
字段c_time:日期/时间类型,默认值:Now()
4.建立一个存放HTML页的文件夹:在文件同一目录下,建立文件夹newsfile,夹子内部主要存放生成的HTML页面,当然内部还会采用程序方式建立以日期命名的子文件夹,以方便浏览以及管理。
功能函数页面lib.asp

<%
'生成文件名的函数
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 & ".shtml"
end function

'保持数据格式不变的函数
function HTMLEncode(fString)
fString = replace(fString, ">", ">")
fString = replace(fString, "<", "<")
fString = Replace(fString, CHR(32), " ")
fString = Replace(fString, CHR(13), "")
fString = Replace(fString, CHR(10) & CHR(10), "<br>")
fString = Replace(fString, CHR(10), "<br>")
HTMLEncode = fString
end function
%>

数据库连接页面conn.asp
完成数据库的字符串连接方法
<%
set conn = Server.CreateObject("ADODB.Connection")
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("asp2html.mdb")
conn.Open connstr
%>
信息输入页面add.html:注意action是跳转到addit.asp
<form action="addit.asp" method="post">
Title:<input type="text" name="c_title"><br>
Content:<br>
<textarea name="c_content" rows="8" cols="30"></textarea><br>
<input type="submit" value="Add">
<input type="reset" value="Reset">
</form>

处理数据功能显示页面addit.asp:首先是处理接受过来的数据,并将值写入数据库;接着将模板代码进行引用,并将其中特殊代码转换为接受值,最终通过FSO生成HTML页面。其中需要注意的还有,生成文件的路径地址保存至数据库表。
<%'容错处理
On Error Resume Next
%>

<!--#include file="conn.asp" -->
<!--#include file="lib.asp" -->

<%'接受传递值
c_title=request.form("c_title")
c_content=request.form("c_content")
%>

<%'生成HTML文件名,建立文件夹,指定文件路径
fname = makefilename(now()) 'makefilename为自定义函数
folder = "newsfile/"&date()&"/"
filepath = folder&fname
%>

<%'将接受值及路径保持至数据库表
sql = "Select * from c_news"
Set rs = Server.CreateObject ("ADODB.Recordset")
rs.Open sql,conn,3,2
rs.addnew
rs("c_title")=c_title
rs("c_content")=c_content
rs("c_filepath")=filepath
rs.update
rs.close
Set rs = Nothing
%>

<%'打开模板代码,并将其中特殊代码转变为接受值
sql1="select m_id,m_html from c_moban where m_id=1"
set rs1=Server.CreateObject("adodb.recordset")
rs1.open sql1,conn,1,1
mb_code=rs1("m_html")
rs1.close
set rs1=nothing
conn.close
set conn=nothing
c_title=htmlencode(c_title)
c_content=htmlencode(c_content)
mb_code=replace(mb_code,"$cntop{LogContent}quot;,now())
mb_code=replace(mb_code,"$cnleft{LogContent}quot;,c_title)
mb_code=replace(mb_code,"$cnright{LogContent}quot;,c_content)
%>

<%'生成HTML页面
Set fso = Server.CreateObject("Scripting.FileSystemObject")
fso.CreateFolder(Server.MapPath(folder))
Set fout = fso.CreateTextFile(Server.MapPath(filepath))
fout.WriteLine mb_code
fout.close
%>
文章添加成功,<a href="showit.asp">浏览</a>

显示数据库表记录,并做指向HTML页的链接:showit.asp
<!--#include file="conn.asp" -->
<!--#include file="lib.asp" -->
<%
Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "Select * from c_news order by c_id desc"
rs.Open sql,conn,1,1
%>

<%
if rs.EOF and rs.BOF then
response.write ("暂时还没有文章,<a href=add.html>添加</a>")
else
Do Until rs.EOF
%>
<table width="758" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#000000">
<tr>
<td width="159" align="right" bordercolor="#CCCCCC" bgcolor="#CCCCCC"><%=rs("c_time")%></td>
<td width="591" bordercolor="#f3f3f3" bgcolor="#f3f3f3"><a href=<%=rs("c_filepath")%> target="a_blank"><%=rs("c_title")%></a></td>
</tr>
<tr>
<td valign="top" align="right" bordercolor="#ececec" bgcolor="#ececec">[<a href=del.asp?c_id=<%=rs("c_id")%>>Dell</a>][<a href=change.asp?c_id=<%=rs("c_id")%>>Edit</a>][<a href="add.html">Add</a>]</td>
<td valign="top" bordercolor="#FFFFFF" bgcolor="#FFFFFF"><%=htmlencode(rs("c_content"))%></td>
</tr>
</table><br>
<%
rs.MoveNext
Loop
end if
%>

<%
rs.close
Set rs = Nothing
conn.close
set conn=Nothing
%>

修改数据内容页change.asp:修改数据内容,同时也需要修改更新对应的HTML页面。修改其实就是重新生成文件,且文件名和之前一样,类似文件的覆盖。
<!--#include file="conn.asp" -->
<!--#include file="lib.asp" -->

<%id=request.querystring("c_id")%>

<%
if request.form("submit")="change" then
c_title=request.form("c_title")
c_content=request.form("c_content")
c_id=request.form("c_id")
c_filepath=request.form("c_filepath")

Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "Select * from c_news where c_id="&c_id
rs.Open sql,conn,3,2
rs("c_title")=c_title
rs("c_content")=c_content
rs("c_time")=now()
rs.update
rs.close
Set rs = Nothing
%>

<%'打开模板代码,并将其中特殊代码转变为接受值
sql1="select m_id,m_html from c_moban where m_id=1"
set rs1=Server.CreateObject("adodb.recordset")
rs1.open sql1,conn,1,1
mb_code=rs1("m_html")
rs1.close
set rs1=nothing
conn.close
set conn=nothing
c_title=htmlencode(c_title)
c_content=htmlencode(c_content)
mb_code=replace(mb_code,"$cntop{LogContent}quot;,now())
mb_code=replace(mb_code,"$cnleft{LogContent}quot;,c_title)
mb_code=replace(mb_code,"$cnright{LogContent}quot;,c_content)
%>

<%'生成HTML页面
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fout = fso.CreateTextFile(Server.MapPath(c_filepath))
fout.WriteLine mb_code
fout.close
%>
<%response.redirect("showit.asp")%>
<%end if%>

<%
if id<>"" then
Set rs = Server.CreateObject ("ADODB.Recordset")
sql="select * from c_news where c_id="&id
rs.Open sql,conn,1,1
c_id=rs("c_id")
c_filepath=rs("c_filepath")
c_title=rs("c_title")
c_content=rs("c_content")
end if
%>

<form action="change.asp" method="post">
Title:<input type="text" name="c_title" value=<%=c_title%>><br>
Content:<br>
<textarea name="c_content" rows="8" cols="30"><%=c_content%></textarea><br>
<input type="submit" value="change" name="submit">
<input type="reset" value="Reset">
<input name="c_id" type="hidden" value="<%=id%>">
<input name="c_filepath" type="hidden" value="<%=c_filepath%>">
</form>

删除记录页del.asp:同样!删除,除了删除数据库表中的记录,与其对应的HTML页面也需删除。代码如下:
<!--#include file="conn.asp" -->

<%
c_id = request.querystring("c_id")
sql = "Select * from c_news where c_id="&c_id
Set rs = Server.CreateObject ("ADODB.Recordset")
rs.Open sql,conn,2,3

filepath=rs("c_filepath")
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile(Server.mappath(filepath))
Set fso = nothing

rs.delete
rs.close
Set rs = Nothing
conn.close
set conn=nothing
%>
<%response.redirect("showit.asp")%>

自己试试吧。



回复
fisherboy 2008-04-16
我对楼上的晕倒 不过还是谢谢
回复
yiy19861 2008-04-16
生成静态页面现在就是两种办法,

1.FSO读模板,或者模板保存在数据库里,通过替换关键字,然后FSO保存为页面.
2.利用xmlHttp,读取已经处理好的ASP页面信息,FSO保存.

2,每个详细页面生成为静态页面的时候,
(1),往往头部都包含小导航,如:首页>公司新闻>公司文化,还有页面旁边有“热点新闻、相关新闻”“广告”等,除了主体部分,这些原来用ASP实现时都是动态变化的,现在做成静态的,怎么办?假如相关新闻有变动,那是不是当前这个详细页面需要重新生成一次?
在模板文件中定义 keyword ,在后台生成页面时,替换导航, 例如, 后台生成数据时,当前页的类别 是 A, 则 replace(CODE,KEYWORD,"A").

(2),当编辑文章时,是不是要重新生成一次?
是,
3,分页显示的时候
(1),同样含有问题2-1的问题
同上.
(2),假设总共有3页,每页10记录,假设记录不增加不减少。假设每个页面只显示文章标题。如果某个文章标题改变了,那么是不是它所属那个页面(如NewsList3.html)要重新生成一次?
是.
(3),假设总共有3页,每页10记录。如果记录有增或者减少,那么各个分页(如:NewsList1.html,NewsList2.html,NewsList3.html)是不是都需要重新生成?因为有可能NewsList3.html这个页面里需要显示的文章又多了一条或者少了一条。
是.
(4),页面下面经常会带有[1][2][3][4]等分页链接。如果增加或者减少了记录,那么总页数有可能增加,意思是有可能总共有5页或者2页了。那么各个分页是不是又必须重新生成一次?首页末页问题,假设原来只有3页,末页是NewsList3.html,现在可能增加了很多记录,末页变成NewsList100.html了,如果以前生成过99个页面,那是不是99个页面的末页都必须改成NewsList100.html,必须重新生成?
是.
(5),怎么区分已经生成过的?将要生成的?
数据库里应该有一个字段存放,对应的页面文件。
4,是不是每次修改数据库,都必须全盘通通重新生成一次?
只生成对当前数据关联的页面.
回复
fisherboy 2008-04-16
还有没有高手帮给我指点下???
回复
zeoyeah 2008-04-16
把你要生成的页面做成模板,存入数据库,然后根据数据库调用可变值与模板结合即可。

至于改动,如果模板改动,则需要全部重新生成html.

不过这种问题也很好解决,可以让程序在执行模板修改的时候将html自动全部重新生成一遍,还是程序控制的问题。
回复
文盲老顾 2008-04-16
如果信息分类发生变动

变动前的分类页及变动后的分类也的所有列表页都要从新生成
回复
fisherboy 2008-04-16
谢谢大家,还有没有谁发表下你们的意见?
回复
liyong888_8 2008-04-16
学习一下!感觉生成静态以后不是那么的灵活,加一条信息就要更新一次
回复
Atai-Lu 2008-04-16
有变动的页面都需要重新生成,没改变的页面可以不动
回复
snlixing 2008-04-16
提高访问速度,减少服务器解释页面的压力,以空间换时间。
回复
1,除了提高浏览速度,把页面生成为html有什么好处?
还有利于搜索引擎
2-1:可以使用JS包含的形式比如<script src="shownew.asp"></script>,也可以使用IFRAME,不然你就得更新了
2-2:当编辑文章时肯定得重新生成详细页
3-1:与2-1一样的道理
3-2:是的,只要改变了一个内容都得需要重新生成才可以显示出改后的
3-3:这个是可以根据情况的,比如当总条数分页并没有超过原先生成的,那么可以只生成含有最新信息的一页,如果你是按ID降序排列的生成的话,那么应该是生成第一页,如果是升序排列的话,那就是最后一页,如果超过了那么也只需要更新第一或者最后一页,再生成新的一最后一页,原来的最后一页就变成倒数第二页或者是第二页了,不过删除的时候只有全部生成了。
3-4:与3-3一样
3-5:这个情况比较复杂,要分好几种,比如是新添加到信息是否已经生成,这个只需要判断生成文件里是否存在,或者利用一个字段来判断是否生成;另一个就是修改信息是否重新生成的情况,一般这个都不这么做,一般修改的时候就已经做生成了,还有一种情况就是删除,这个就更复杂了,最麻烦的就是删除的了

4:不是每次修改数据库都要全部生成的,看情况,必须删除数据就只能全新生成,因为如果你删除的中间一条,那么就乱了,还有就是修改的时候也比较麻烦,也就是分列表页的修改比较麻烦
回复
fisherboy 2008-04-15
还有没有谁说的仔细清楚点啊?
回复
骑龙戏水 2008-04-15
静态页面生成:不管是文章页面还是索引页面都属于静态页面
可以使用模板方法或截获输出缓冲方法来取得要生成的内容
不知道ASP有没有相应的处理机制,不过最终肯定是要用FSO来生成的.
1\用JS调用是一种方法, 动网论坛的方法。
2\还可以采用IFRAME嵌套的方法,在文章页面嵌一个IFRAME,然后IFRAME加载ASP页面
<iframe src="getComment.asp?articleID=123></iframe>
getComment.asp中根据articleID取得文章对应的评论,并显示为列表
同理,点击,访问等统计数据也可以由该方法得到
索引页面一般只生成第一页就行了,因为第一页的访问量一般来说是最大的,
生成时可以如下处理:在添加文章时,提交后先生成该文章对应的静态页面,在根据该文章所属类别回溯生成所有索引页面,
如文章类别为 首页->电脑->软件->WEB开发,那么在生成索引页面应依次将这四个类别的索引页生成。
总之,也就是说在提交文章时生成索引页.
回复
相关推荐
发帖
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
帖子事件
创建了帖子
2008-04-15 10:38
社区公告
暂无公告