ASP如何生成静态页面分析

 此之前我一篇教程中介绍过,1 WITH TEMPLET 意思是生成的页面架构将采用某个已设定的模板。希望各位在看本教程之前对 ASP 采用模板应熟悉下。其中最值得知道的就是静态 HTML 页和动态页对服务器的要求接受能力小得多, 2 ASP 转变为 HTML 不要我再说 ASP 转变成 HTML 好处了吧。同样,静态 HTML 搜索几率远比动态页面的多得多。现在需要处置的技术问题就是 那么。1 如何实现模板技术?2 如何实现 2HTML 技术?3 如何让模板技术与 2HTML 技术结合?一、先进行技术原理分析1 模板技术参看因为该组件能新建任何文件格式。 2 如何使得 ASP 页面转变为 HTML 一般都会想到 FSO 组件。那么其整个运行过程是怎么样的呢?a 提供信息输入页面进行信息收集;再 FSO 生成文件; b 接受信息值先保存数据库。显示刚被创建的 HTML 文件的路径地址。该技术的实现过程中有如下几个难点: c 技术性完成任务。还是单独放在某个每日更新的子文件夹中?可能表述不准确, i FSO 生成的文件是直接放在一个大文件夹下。这样理解吧:相信通过 FSO 生成的文件随着时间的推移,文件会越来越多,管理也会越来越乱 … 通常你可能看到一些地址诸如 www.xxx.com/a/2004-5-20/200405201111.html 可以分析得出应该是建立了当前日期的文件夹。这样,一天就是一个文件夹的页面内容,检查管理也就显得比较合理。又发现了第二个问题。第一次通过 FSO 建立以当前日期命名的文件夹, ii 试图通过以上方法建立文件夹的时候。没有问题。当我有新的文件需要生成时,因为是同一个顺序,所以,其又将会执行建立同样的文件夹。此时, FSO 组件会发现该路径已存在卡壳 -_-! 继续处置,首行添加代码:引用 :On Error Resum Next达到自欺欺人、掩耳盗铃的效果。当然规矩的用法是判断文件夹的有无引用 :< %Set fso = Server.CreateObject "Scripting.FileSystemObject"if fso.FolderExist Server.MapPath folder then' 判断如果存在就不做处理else' 判断如果不存在则建立新文件夹fso.CreateFold Server.MapPath folderend if% >  功能就是如何生成文件名: iii 文件夹是建立了文件该如何建立呢?主要也就是文件名的生成。当然这个就需要自己来写个函数。引用 :< %function makefilenam fname后 fname 为函数参数引用 fname = fname ' 前 fname 为变量。"-",fname = replac fname.""" ",fname = replac fname.""":",fname = replac fname."""PM",fname = replac fname."""A M",fname = replac fname.""" 上午 ",fname = replac fname.""" 下午 ",fname = replac fname.""makefilenam = fname & ".html"end function% >引用函数则:< %fname = makefilenam now % >就是以年月日时分秒命名的文件。 其实嘛。生成的文件该如何查看到当然需要把生成文件的路径保管的数据库中, iv 最后。并且添加到相对应的记录集中了当然,这在下面的数据库设计时会提及到完成模板功能;将最终替换过的所有模板代码生成 HTML 文件。需要注意的替换应能将输入数据的格式或者支持 UBB 代码完全改变。 3 模板技术和 2HTML 技术的结合:将模板中特殊代码的值替换为从表单接受过来的值。  二、再进行数据库设计目前数据库的设计需要两个表:一个是存放模板数据的一个是存放信息内容的 1 建立新数据库 ASP2html.mdb2 设计新数据库表 c_moban主关键字)字段 m_html 备注类型) 字段 m_id 自动编号。并将下列完整的代码拷贝至 m_html 字段引用 :< html >< head >< meta http-equiv="Content-Type" content="text/html; charset=hz" >< titl > Cnbruce.Com | ASP2HTML TEST < /titl >< /head >< bodi leftmargin="0" topmargin="0" >< tabl 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 >< /tabl >< /bodi >< /html >3 设计新数据库表 c_news主关键字 字段 c_id 自动编号。保管文章标题 字段 c_titl 文本类型。保管文章内容 字段 c_content 备注类型。坚持生成文件的路径地址 字段 c_filepath 文本类型。默认值: Now 字段 c_time 日期 / 时间类型。三、页面需求设计1 首先建立一个存放 HTML 页的文件夹建立文件夹 newsfil 夹子内部主要存放生成的 HTML 页面,文件同一目录下。当然内部还会采用顺序方式建立以日期命名的子文件夹,以方便浏览以及管理。2 功能函数页面 lib.asp引用 :< %' 生成文件名的函数function makefilenam fnamefname = fname"-",fnam = replac fname.""" ",fname = replac fname.""":",fname = replac fname."""PM",fname = replac fname."""A M",fname = replac fname.""" 上午 ",fname = replac fname.""" 下午 ",fname = replac fname.""makefilename=fnam & ".shtml"end function' 坚持数据格式不变的函数function HTMLEncode fString" > ",fString = replac fString. ">"" < ",fString = replac fString. "<"CHR 32 ,fString = Replac fString. " "CHR 13 ,fString = Replac fString. ""CHR 10 & CHR 10 ,fString = Replac fString. " < br > "CHR 10 ,fString = Replac fString. " < br > "HTMLEncode = fStringend function% >3 数据库连接页面 conn.asp完成数据库的字符串连接方法< %set conn = Server.CreateObject "A DODB.Connection"connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath "asp2html.mdb"conn.Open connstr% >4 信息输入页面 add.html就是表单嘛。注意 action 跳转到 addit.as 其实很简单。p引用 :< 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="A dd" >< input type="reset" value="Reset" >< /form >5 处置数据功能显示页面 addit.asp并将值写入数据库;接着将模板代码进行引用,首先是处置接受过来的数据。并将其中特殊代码转换为接受值,最终通过 FSO 生成 HTML 页面。其中需要注意的还有,生成文件的路径地址保管至数据库表。引用 :< %' 容错处置On Error Resum Next% >< !--#includ file="conn.asp" -- >< !--#includ file="lib.asp" -- >< %' 接受传送值c_title=request.form "c_title"c_content=request.form "c_content"% >建立文件夹,< %' 生成 HTML 文件名。指定文件路径fname = makefilenam now 'makefilenam 为自定义函数folder = "newsfile/"&d &"/"filepath = folder&fname% >< %' 将接受值及路径保持至数据库表sql = "Select * from c_news"Set rs = Server.CreateObject "A DODB.Recordset"conn,rs.Open sql.3,2rs.addnewr "c_title" =c_titler "c_content" =c_contentr "c_filepath" =filepathrs.updaters.closSet rs = Nothing% >并将其中特殊代码转变为接受值 < %' 打开模板代码。m_html from c_moban where m_id=1sql1="select m_id."set rs1=Server.CreateObject "adodb.recordset"conn,rs1.open sql1.1,1mb_code=rs1 "m_html"rs1.closeset rs1=nothingconn.closeset conn=nothingc_title=htmlencod c_titlc_content=htmlencod c_content"$cntop{LogContent}quot;,mb_code=replac mb_code.now"$cnleft{LogContent}quot;,mb_code=replac mb_code.c_titl"$cnright{LogContent}quot;,mb_code=replac mb_code.c_cont% >< %' 生成 HTML 页面Set fso = Server.CreateObject "Scripting.FileSystemObject"fso.CreateFold Server.MapPath folderSet fout = fso.CreateTextFil Server.MapPath filepathfout.WriteLin mb_codefout.close% >< a href="showit.asp" >浏览< /a >   文章添加胜利。; 并做指向 HTML 页的链接: showit.A S 6 显示数据库表记录。P引用 :< !--#includ file="conn.asp" -- >< !--#includ file="lib.asp" -- >< %Set rs = Server.CreateObject "A DODB.Recordset"sql = "Select * from c_new order by c_id desc"conn,rs.Open sql.1,1% >< %if rs.EOF and rs.BOF then< a href=add.html >添加< /a > " response.writ " 暂时还没有文章。elseDo Until rs.EOF% >< tabl width="758" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#000000" >< tr >< td width="159" align="right" bordercolor="#CCCCCC" bgcolor="#CCCCCC" >< %=r "c_time" % >< /td >< td width="591" bordercolor="#f3f3f3" bgcolor="#f3f3f3" >< a href= < %=r "c_filepath" % > target="a_blank" >< %=r "c_title" % >< /a >< /td >< /tr >< tr >< td valign="top" align="right" bordercolor="#ececec" bgcolor="#ececec" > [ < a href=del.asp?c_id= < %=r "c_id" % >> Dell < /a > ][ < a href=change.asp?c_id= < %=r "c_id" % >> Edit < /a > ][ < a href="add.html" > Add < /a > ] < /td >< td valign="top" bordercolor="#FFFFFF" bgcolor="#FFFFFF" >< %=htmlencod rs "c_content" % >< /td >< /tr >< /tabl >< br >< %rs.MoveNextLoopend if% >< %rs.closeSet rs = Nothingconn.closset conn=Nothing% >7 修改数据内容页 change.asp同时也需要修改更新对应的 HTML 页面。修改其实就是重新生成文件,修改数据内容。且文件名和之前一样,类似文件的覆盖。引用 :< !--#includ file="conn.asp" -- >< !--#includ file="lib.asp" -- >< %id=request.querystr "c_id" % >< %if request.form "submit" ="change" thenc_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 "A DODB.Recordset"sql = "Select * from c_new where c_id="&c_idconn,rs.Open sql.3,2r "c_title" =c_titler "c_content" =c_contentr "c_time" =nowrs.updaters.closSet rs = Nothing% >并将其中特殊代码转变为接受值 < %' 打开模板代码。m_html from c_moban where m_id=1sql1="select m_id."set rs1=Server.CreateObject "adodb.recordset"conn,rs1.open sql1.1,1mb_code=rs1 "m_html"rs1.closeset rs1=nothingconn.closeset conn=nothingc_title=htmlencod c_titlc_content=htmlencod c_content"$cntop{LogContent}quot;,mb_code=replac mb_code.now"$cnleft{LogContent}quot;,mb_code=replac mb_code.c_titl"$cnright{LogContent}quot;,mb_code=replac mb_code.c_cont% >< %' 生成 HTML 页面Set fso = Server.CreateObject "Scripting.FileSystemObject"Set fout = fso.CreateTextFil Server.MapPath c_filepathfout.WriteLin mb_codefout.close% >< %response.redirect "showit.asp" % >< %end if% >< %if id <> "" thenSet rs = Server.CreateObject "A DODB.Recordset"sql="select * from c_new where c_id="&idconn,rs.Open sql.1,1c_id=r "c_id"c_filepath=r "c_filepath"c_title=r "c_title"c_content=r "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 >8 删除记录页 del.asp除了删除数据库表中的记录,同样!删除。与其对应的 HTML 页面也需删除。代码如下:引用 :< !--#includ file="conn.asp" -- >< %c_id = request.querystr "c_id"sql = "Select * from c_new where c_id="&c_idSet rs = Server.CreateObject "A DODB.Recordset"conn,rs.Open sql.2,3filepath=r "c_filepath"Set fso = CreateObject "Scripting.FileSystemObject"fso.DeleteFil Server.mappath filepathSet fso = nothingrs.deleters.closSet rs = Nothingconn.closeset conn=nothing% >< %response.redirect "showit.asp" % >四、其它功能模板管理页面:所以,不会每次都是打开数据库表进行增加或者修改模板代码吧。管理代码的页面顺序不能少了自己捣鼓下应该很简单的当然,之前管理员的登录认证顺序就不在书中交代了还有,如果设计了多个模板,那么在发表信息的时候应添加模板选择单选框,同样在执行转换 HTML 时, SQL 选择的不同 m_id 比如生成 html 网页有利于被搜索引擎收录 , 网页生成静态 Html 文件有许多好处 . 不只被收录的快还收录的全 . 前台脱离了数据访问 , 减轻对数据库访问的压力 , 加快网页打开速度 . 所以吟清最近对生成 html 比较感兴趣 , 看了不少文章 , 也有一点点收获 .下面这个例子直接利用 FSO 把 html 代码写入到文件中然后生成 .html 格式的文件 1.< %filename="test.htm" if request "body" < >"" then set fso = Server.CreateObject "Scripting.FileSystemObject"  set htmlwrite = fso.CreateTextFil server.mappath ""&filename&""  htmlwrite.writ " < html> < head> < title>" & request.form "title" & " < /title> < /head>" htmlwrite.writ " < body> 输出 Titl 内容 : " & request.form "title" & " < br /> 输出 Bodi 内容 :" & request.form "body" & " < /body> < /html>" htmlwrite.close set fout=nothing set fso=nothing end if %> < form name="form" method="post" action=""> < input name="title" value="Title" size=26> < br> < textarea name="body">Bodi < /textarea> < br> < br> < input type="submit" name="Submit" value=" 生成 html"> < /form>第二种方法就是利用模板技术 ,2 但是依照上面的方法生成 html 文件非常不方便 . 将模板中特殊代码的值替换为从表单或是数据库字段中接受过来的值 , 完成模板功能 ; 将最终替换过的所有模板代码生成 HTML 文件 . 这种技术采用得比较多 , 大部分的 CMS 都是使用这类方法 .template.htm ' // 模板文件 < html>< head> < title>$title$ by aspid.cn < /title> < /head> < body> $body$ < /body> < /html> ? TestTemplate.asp '// 生成 Html < % htmlwrite  Dim fso.strContent,Dim strTitle.strOut '// 创建文件系统对象  Set fso=Server.CreateObject "Scripting.FileSystemObject"  读取模板内容   '// 打开网页模板文件。Set htmlwrite=fso.OpenTextFil Server.MapPath "Template.htm"  strOut=f.ReadA ll htmlwrite.close strTitle=" 生成的网页标题 " strContent=" 生成的网页内容 " '// 用真实内容替换模板中的标志  "$title$",strOut=Replac strOut.strTitl  "$body$",strOut=Replac strOut.strCont  '// 创建要生成的静态页  true   Set htmlwrite=fso.CreateTextFil Server.MapPath "test.htm" .'// 写入网页内容  htmlwrite.WriteLin strOut htmlwrite.close Response.Writ " 生成静态页成功! " '// 释放文件系统对象  set htmlwrite=Nothing set fso=Nothing %> 再用 ADODB.Stream 或者 Scripting.FileSystemObject 保管成 html 文件。这句话是蓝色理想上看到 ,3 第三种方法就是用 XMLHTTP 获取动态页生成的 HTML 内容。对 XMLHTTP 吟清还不熟悉正在找资料了解 . 找到一段 XMLHTTP 生成 Html 代码参考一下 .< % ' 常用函数  返回值 getHTTPPag 目标网页的 html 代码   '1 输入 url 目标网页地址。function getHTTPPag url  dim Http set Http=server.createobject "MSXML2.XMLHTTP"  url,Http.open "GET".false Http.send  if Http.readyst < >4 then exit function end if "GB2312"   getHTTPPage=bytesToBSP Http.responseBody.set http=nothing if err.numb < >0 then err.Clear end function 直接用 xmlhttp 调用有中文字符的网页得到将是乱玛,2 转换乱玛。可以通过 adodb.stream 组件进行转换Cset   Function BytesToBstr body.dim objstream set objstream = Server.CreateObject "adodb.stream"  objstream.Typ = 1 objstream.Mod =3 objstream.Open objstream.Writ body objstream.Posit = 0 objstream.Typ = 2 objstream.Charset = Cset BytesToBstr = objstream.ReadText objstream.Close set objstream = nothing   End Function txtURL=server.MapPath "../index.asp"  sText = getHTTPPag txtURL  Set FileObject=Server.CreateObject "Scripting.FileSystemObject"  filename="../index.htm" 2,Set openFile=FileObject.OpenTextfil server.mapPath filenam .true 'true 为不存在自行建立  openFile.writelin sText  Set OpenFile=nothing %> < script> alert " 静态网页生成完毕 " ; history.back ; < /script>

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《ASP如何生成静态页面分析》
文章链接:https://www.skykkk.com/archives1943.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

相关推荐

  • 暂无文章