ASP生成静态页面的方法初学ASP,程序是能勉强写出来了,但若每进行一次网站页面的改版,所有的源程序都将进行一次移植手术。为此所耗费的人力精力不计其数,甚至一不小心得不偿失、前功尽弃。所以,梦想着那么大段的程序代码变成几个简单的字符代替,这样只要设计好页面把该功能插入就OK了。其实这也简单,只需将实现该功能的程序代码做成子程序,然后主页调用就可以了。很多时候,在博客中国,你会选择到很多的模板,甚至有可能自己来设计;或者采用猪飞飞BLOG的各大站长都将其站点改得不近相同……这些,我们都归功于ASP采用模板的功能。那下面偶就借花献佛,将模板拿来分析,以馈各位朋友。首先,模板需要在线修改,则应采用数据库保存模板代码所谓的模板,就是设计完工的标准的HTML代码,其中需要由程序实现的功能部分将采用特殊字符串代替。然,这些特殊字符串需要在显示的时候被编译为对应的功能。1,设计数据库testmb.mdb新建表moban:字段m_id(自动编号,主关键字);字段m_html(备注类型)2,假设第一模板内容代码将下列代码拷贝到m_html字段中htmlheadmetahttp-equiv=Content-Typecontent=text/html;charset=gb2312titletestmb/title/headbodyleftmargin=0topmargin=0tablewidth=100%height=100%border=0cellpadding=5cellspacing=2tralign=rightbgcolor=#CCCCCCtdheight=20colspan=2$cntop$/td/trtrvalign=toptdwidth=25%bgcolor=#e5e5e5$cnleft$/tdtdwidth=74%bgcolor=#f3f3f3$cnright$/td/tr/table/body/html注意$cntop$、$cnleft$、$cnright$,它们将要实现某些具体的程序功能3,建立数据库连接文件conn.asp%setconn=Server.CreateObject(ADODB.Connection)connstr=Provider=Microsoft.Jet.OLEDB.4.0;DataSource=&Server.MapPath(testmb.mdb)conn.Openconnstr%4,建立特殊字符串转换所需要的库文件lib.asp该文件的主要作用是将实现某些功能的ASP程序做成字程序,以方便调用。%dimtopcodesubcntop()topcode=现在时间是:topcode=topcode&now()endsubdimleftcode,isubcnleft()fori=1to5leftcode=leftcode&pcnbruce.comnextendsubdimrightcodesubcnright()fori=1to9rightcode=rightcode&hrcolor=&i&i&i&i&i&i&nextendsub%5,最后,调用数据库中的模板代码,将特殊字符串转换。!--#includefile=conn.asp--!--#includefile=lib.asp--%sql=select*frommobanwherem_id=1setrs=Server.CreateObject(adodb.recordset)rs.opensql,conn,1,1mb_code=rs(m_html)rs.closesetrs=nothingcntop()mb_code=replace(mb_code,$cntop$,topcode)cnleft()mb_code=replace(mb_code,$cnleft$,leftcode)cnright()mb_code=replace(mb_code,$cnright$,rightcode)response.writemb_code%ASP2HTMLWITHTEMPLET我希望大家看到该标题就能让想象到它的功能:1,WITHTEMPLET意思是,生成的页面架构将采用某个已设定的模板,在此之前我的一篇教程中介绍过,希望各位在看本教程之前对ASP采用模板应熟悉下。(当然,不看也没有问题,本教程同样会提及精华部分的:)2,ASP2HTML。不要我再说ASP转变成HTML的好处了吧,呵呵,其中最值得知道的就是:静态HTML页和动态页对服务器的要求承受能力小得多,同样,静态HTML搜索几率远比动态页面的多得多。那么,我现在需要处理的技术问题就是:1,如何实现模板技术?(先参看下上篇文章吧)2,如何实现2HTML技术?3,如何让模板技术与2HTML技术结合?一、先进行技术原理分析1,模板技术参看2,2HTML技术又该如何实现呢?如何使得ASP页面转变为HTML?一般都会想到FSO组件,因为该组件能新建任何文件格式。那么其整个运行过程是怎么样的呢?a,提供信息输入页面进行信息收集;b,接受信息值先保存数据库,再FSO生成文件;c,技术性完成任务,显示刚被创建的HTML文件的路径地址。该技术的实现过程中有如下几个难点:i,FSO生成的文件是直接放在一个大文件夹下,还是单独放在某个每日更新的子文件夹中?可能表述不准确,这样理解吧:相信通过FSO生成的文件随着时间的推移,文件会越来越多,管理也会越来越乱……通常你可能看到一些地址诸如可以分析得出应该是建立了当前日期的文件夹。这样,一天就是一个文件夹的页面内容,查看管理也就显得比较合理。ii,我在试图通过以上方法建立文件夹的时候,又发现了第二个问题。第一次通过FSO建立以当前日期命名的文件夹,没有问题。当我有新的文件需要生成时,因为是同一个程序,所以,其又将会执行建立同样的文件夹。此时,FSO组件会发现该路径已存在……卡壳-_-!继续处理,在首行添加代码:引用:--------------------------------------------------------------------------------OnErrorResumeNext--------------------------------------------------------------------------------嘿嘿,达到自欺欺人、掩耳盗铃的效果。当然规矩的用法是判断文件夹的有无引用:--------------------------------------------------------------------------------%Setfso=Server.CreateObject(Scripting.FileSystemObject)if(fso.FolderExists(Server.MapPath(folder)))then'判断如果存在就不做处理else'判断如果不存在则建立新文件夹fso.CreateFolder(Server.MapPath(folder))endif%--------------------------------------------------------------------------------iii,文件夹是建立了,文件该如何建立呢?主要也就是文件名的生成。当然这个就需要自己来写个函数,功能就是如何生成文件名:)引用:--------------------------------------------------------------------------------%functionmakefilename(fname)fname=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&.htmlendfunction%引用函数则:%fname=makefilename(now())%--------------------------------------------------------------------------------其实嘛,就是以年月日时分秒命名的文件。iv,最后,生成的文件该如何查看到?当然需要把生成文件的路径保存的数据库中,并且添加到相对应的记录集中了。当然,这在下面的数据库设计时会提及到。3,模板技术和2HTML技术的结合:将模板中特殊代码的值替换为从表单接受过来的值,完成模板功能;将最终替换过的所有模板代码生成HTML文件。需要注意的是:替换应能将输入数据的格式或者支持UBB的代码彻底改变。二,再进行数据库设计目前数据库的设计需要两个表:一个是存放模板数据的;一个是存放信息内容的。1,建立新数据库asp2html.mdb2,设计新数据库表c_moban字段m_id(自动编号,主关键字);字段m_html(备注类型)。并将下列完整的代码拷贝至m_html字段引用:--------------------------------------------------------------------------------htmlheadmetahttp-equiv=Content-Typecontent=text/html;charset=hztitleCnbruce.Com|ASP2HTMLTEST/title/headbodyleftmargin=0topmargin=0tablewidth=100%height=100%border=0cellpadding=5cellspacing=2tralign=rightbgcolor=#CCCCCCtdheight=20colspan=2$cntop{LogContent}lt;/td/trtrvalign=toptdwidth=25%bgcolor=#e5e5e5$cnleft{LogContent}lt;/tdtdwidth=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()三,页面需求设计1,首先建立一个存放HTML页的文件夹在文件同一目录下,建立文件夹newsfile,夹子内部主要存放生成的HTML页面,当然内部还会采用程序方式建立以日期命名的子文件夹,以方便浏览以及管理。2,功能函数页面lib.asp引用:--------------------------------------------------------------------------------%'生成文件名的函数functionmakefilename(fname)fname=fnamefname=replace(fname,-,)fname=replace(fnam