版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ASP生成静态页面1. 什么是动态网页和静态网页动态网页:一般指的是采用ASP,ASP.NET,JSP,PHP,Cold Fusion,CGI等程序动态生成的页面,该网页中的大部分数据内容来自与网站相连的数据库。这个页面在网络空间中并不存在,动态网页往往容易给人留下深刻的印象。此外,动态网页还具有容易维护、更新的优点。首先网页获得用户的指令,然后网页拿着指令到数据库中找和指令对应的数据,然后传递给服务器,通过服务器的编译把动态页面编译成标准的HTML代码,传递给用户浏览器,这样用户就看到了网页。问题出来了,每次访问网页都要经过这么一个过程,这一过程至少需要几秒钟的时间,访问的人数一多,页面的加
2、载速度就会变慢,对服务器来说也是一种负担;从用户角度来说,网页加载的慢,所以大型网站都是静态网页呈现。绝大多数的搜索引擎都已支持动态页面的抓取,这就是我们现在这些搜索引擎进行搜索时,结果中出现动态链接的原因,但抓取的数量比静态页面要差的很多倍。静态网页:静态网页就简单了,静态网页是实际存在的,无需经过服务器的编译,直接加载到客户浏览器上显示出来。由此可见,动态网页在访问速度上并不占优势。但是静态网页也有自己的缺陷,由于占用空间比较大,需要大量的服务器,花费上要高于动态网页网站。伪静态:论坛和留言系统程序由于评论的人较多,更新速度较快,用纯静态可以说是不起实际,但是用纯静态搜索引擎非常不友好,这
3、时候就出现了一种新的技术,伪静态。伪静态的缺点是页面访问速度较慢,cpu占用资源较大,如果是ISS数是1000的网站,当有300人同时在线的时候就会出现错误。但是伪静态对收录同样能起到非常好的作用。2. 为什么要生成静态页面在三年前,有百分之八十的网站要求做成动态的。也就是从那个时候也就是ASP的发展高峰期。一些静态网页也要求做成动态网站。但是这二年来,网站要求做成静态的。也就是网页要求静态化。为什么会有这样的变化?到底意味着什么?目前网页HTML静态化是利用其它的动态技术生成HTML静态页面,还不是静态网站。因为的确是这样的,生成HTML静态网页有一定的好处。一、加快页面打开浏览速度,静态页
4、面无需连接数据库打开速度较动态页面有明显提高;二、有利于搜索引擎优化SEO,Baidu、Google都会优先收录静态页面,不仅被收录的快还收录的全;三、减轻服务器负担,浏览网页无需调用系统数据库;四、网站更安全,HTML页面不会受Asp相关漏洞的影响;推荐精选观看一下大一点的网站基本全是静态页面,而且可以减少攻击,防sql注入。数据库出错时,不影响网站正常访问。生成html文章虽操作上麻烦些,程序上繁杂些,但为了更利于搜索,为了速度更快些,更安全,这些牺牲还是值得的。说法一:1、省掉了服务器处理时间和调用数据库的时间,访问速度比一般动态网站快10-20倍;2、不用调用数据库,服务器端的CPU调
5、用大大减少,增加服务器的性能;3、生成静态路径利用搜索引擎的抓取和收录;4、在排名中静态页面的排名权重要高于动态路径的页面。说法二:1、安全,静态页面从理论上讲是没有攻击漏洞的;2、没有数据库访问或减少服务器对数据响应的负荷,速度快;3、化化引擎,易于搜索引擎收录,搜索引擎比较喜欢收录静态页面;4、降低服务器的承受能力,因为其不需要解析就可以返回客户端,因此减少了服务器的工作量,同时也减少了数据库的成本;5、有意义的文件名,提高了可用性(对中文似乎就没这个优势了吧) 。说法三:提问:ASP生成静态HTML后更有利于搜索引擎收录吗?为什么?答:是的,静态HTML更有利于搜索引擎收录。因为静态网页
6、和动态网页的区别在于动态网页可以给于浏览者权限,而搜索引擎抓取的时候是以游客身份进入的,所以不容易被抓取和收录,而静态网页由于不存在页面权限问题,所以更容易被收录,相对来说如果你的动态页面没有加任何权限的话也同样容易被收录!例如不生成静态页面的博客ASP PHP .net CGI的论坛,只要没有访问权限限制都会被收录!从以上的观点可以看出,生成静态页面的好处。现在知名、主流的大站基本上都静下来了。3. ASP生成静态页面的方法随着网站访问量的加大,每次从数据库读取都是以效率作为代价的,很多用ACCESS作数据库的更会深有体会,静态页加在搜索时,也会被优先考虑。互联网上流行的做法是将数据源代码写
7、入数据库再从数据库读取生成静态面,这样无形间就加大了数据库。将现有的ASP页直接生成静态页,将会节省很多。下面的例子是将、index.asp?id=1/index.asp?id=2/index.asp?id=3/这三个动态页面,分别生成index1.htm,index2.htm,index3.htm存在根目录下面:代码如下<%dim strUrl,Item_Classid,id,FileName,FilePath,Do_Url,Html_TempHtml_Temp="<UL>"For i=1 To 3推荐精选Html_Temp = Html_Temp&am
8、p;"<LI>"Item_Classid = iFileName = "Index"&Item_Classid&".htm"FilePath = Server.MapPath("/")&""&FileNameHtml_Temp = Html_Temp&FilePath&"</LI>"Do_Url = 你的网站地址Do_Url = Do_Url&Request.ServerVariables(&qu
9、ot;SERVER_NAME")&"/main/index.asp"Do_Url = Do_Url&"?Item_Classid="&Item_ClassidstrUrl = Do_Urldim objXmlHttpset objXmlHttp = Server.CreateObject("Microsoft.XMLHTTP")objXmlHttp.open "GET",strUrl,falseobjXmlHttp.send()Dim binFileDatabinFileData
10、= objXmlHttp.responseBodyDim objAdoStreamset objAdoStream = Server.CreateObject("ADODB.Stream")objAdoStream.Type = 1objAdoStream.Open()objAdoStream.Write(binFileData)objAdoStream.SaveToFile FilePath,2 objAdoStream.Close()NextHtml_Temp = Html_Temp&"<UL>"%><%Respons
11、e.Write ( "成功生成文件:" )Response.Write ( "<BR>" )Response.Write Html_Temp%>推荐精选ASP生成静态页面的方法ASP2HTML WITH TEMPLET我希望大家看到该标题就能让想象到它的功能:1,WITH TEMPLET意思是,生成的页面架构将采用某个已设定的模板,在此之前我的一篇教程中介绍过,希望各位在看本教程之前对ASP采用模板应熟悉下。(当然,不看也没有问题,本教程同样会提及精华部分的:)具体参考: 2,ASP2HTML。不要我再说ASP转变成HTML的好处了吧,
12、呵呵,其中最值得知道的就是:静态HTML页和动态页对服务器的要求承受能力小得多,同样,静态HTML搜索几率远比动态页面的多得多。那么,我现在需要处理的技术问题就是:1,如何实现模板技术?(先参看下上篇文章吧)2,如何实现2HTML技术?3,如何让模板技术与2HTML技术结合?一、先进行技术原理分析1,模板技术参看 2,2HTML技术又该如何实现呢?如何使得ASP页面转变为HTML?一般都会想到FSO组件,因为该组件能新建任何文件格式。那么其整个运行过程是怎么样的呢?a,提供信息输入页面进行信息收集;b,接受信息值先保存数据库,再FSO生成文件;c,技术性完成任务,显示刚被创建的HTML文件的路
13、径地址。该技术的实现过程中有如下几个难点:i,FSO生成的文件是直接放在一个大文件夹下,还是单独放在某个每日更新的子文件夹中?可能表述不准确,这样理解吧:相信通过FSO生成的文件随着时间的推移,文件会越来越多,管理也会越来越乱通常你可能看到一些地址诸如 推荐精选 可以分析得出应该是建立了当前日期的文件夹。这样,一天就是一个文件夹的页面内容,查看管理也就显得比较合理。ii,我在试图通过以上方法建立文件夹的时候,又发现了第二个问题。第一次通过FSO建立以当前日期命名的文件夹,没有问题。当我有新的文件需要生成时,因为是同一个程序,所以,其又将会执行建立同样的文件夹。此时,FSO组件会发现该路径已存在
14、卡壳-_-! 继续处理,在首行添加代码:引用: On Error Resume Next嘿嘿,达到自欺欺人、掩耳盗铃的效果。当然规矩的用法是判断文件夹的有无引用: <%Set fso = Server.CreateObject("Scripting.FileSystemObject")if (fso.FolderExists(Server.MapPath(folder) then'判断如果存在就不做处理else'判断如果不存在则建立新文件夹fso.CreateFolder(Server.MapPath(folder)end if%> 推荐精选ii
15、i,文件夹是建立了,文件该如何建立呢?主要也就是文件名的生成。当然这个就需要自己来写个函数,功能就是如何生成文件名:)引用: <%function makefilename(fname)fname = fname '前fname为变量,后fname为函数参数引用fname = replace(fname,"-","")fname = replace(fname," ","") fname = replace(fname,":","")fname = replac
16、e(fname,"PM","")fname = replace(fname,"AM","")fname = replace(fname,"上午","")fname = replace(fname,"下午","")makefilename = fname & ".html"end function %>引用函数则:<%fname = makefilename(now()%>推荐精选其实嘛,就是
17、以年月日时分秒命名的文件。iv,最后,生成的文件该如何查看到?当然需要把生成文件的路径保存的数据库中,并且添加到相对应的记录集中了。当然,这在下面的数据库设计时会提及到。3,模板技术和2HTML技术的结合:将模板中特殊代码的值替换为从表单接受过来的值,完成模板功能;将最终替换过的所有模板代码生成HTML文件。需要注意的是:替换应能将输入数据的格式或者支持UBB的代码彻底改变。二,再进行数据库设计目前数据库的设计需要两个表:一个是存放模板数据的;一个是存放信息内容的。1,建立新数据库asp2html.mdb2,设计新数据库表c_moban字段m_id(自动编号,主关键字);字段m_html(备注
18、类型)。并将下列完整的代码拷贝至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%&quo
19、t; height="100%" border="0" cellpadding="5" cellspacing="2"><tr align="right" bgcolor="#CCCCCC"> <td height="20" colspan="2">$cntopLogContentlt;/td></tr><tr valign="top"> <td wi
20、dth="25%" bgcolor="#e5e5e5">$cnleftLogContentlt;/td><td width="74%" bgcolor="#f推荐精选3f3f3">$cnrightLogContentlt;/td></tr></table></body></html>3,设计新数据库表c_news字段c_id:自动编号,主关键字字段c_title:文本类型,保存文章标题字段c_content:备注类型,保存文章内容字段c_
21、filepath:文本类型,保持生成文件的路径地址字段c_time:日期/时间类型,默认值:Now()三,页面需求设计1,首先建立一个存放HTML页的文件夹在文件同一目录下,建立文件夹newsfile,夹子内部主要存放生成的HTML页面,当然内部还会采用程序方式建立以日期命名的子文件夹,以方便浏览以及管理。2,功能函数页面lib.asp推荐精选引用: <%'生成文件名的函数function makefilename(fname)fname = fnamefname = replace(fname,"-","")fname = replace
22、(fname," ","") fname = replace(fname,":","")fname = replace(fname,"PM","")fname = replace(fname,"AM","")fname = replace(fname,"上午","")fname = replace(fname,"下午","")makefilename=fna
23、me & ".shtml"end function '保持数据格式不变的函数function HTMLEncode(fString)fString = replace(fString, ">", ">")fString = replace(fString, "<", "<")fString = Replace(fString, CHR(32), " ")fString = Replace(fString
24、, CHR(13), "")fString = Replace(fString, CHR(10) & CHR(10), "<br>")fString = Replace(fString, CHR(10), "<br>")HTMLEncode = fStringend function%>推荐精选3,数据库连接页面conn.asp完成数据库的字符串连接方法<%set conn = Server.CreateObject("ADODB.Connection")connstr
25、= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("asp2html.mdb")conn.Open connstr%>4,信息输入页面add.html其实很简单:)就是表单嘛。注意action是跳转到addit.asp引用: <form action="addit.asp" method="post">Title:<input type="text" name="c_titl
26、e"><br>Content:<br><textarea name="c_content" rows="8" cols="30"></textarea><br><input type="submit" value="Add"><input type="reset" value="Reset"></form>5,处理数据功能显示页面addit.as
27、p首先是处理接受过来的数据,并将值写入数据库;接着将模板代码进行引用,并将其中特殊代码转换为接受值,最终通过FSO生成HTML页面。其中需要注意的还有,生成文件的路径地址保存至数据库表。引用: 推荐精选<%'容错处理On Error Resume Next%><!-#include file="conn.asp" -><!-#include file="lib.asp" -><%'接受传递值c_title=request.form("c_title")c_content=req
28、uest.form("c_content")%><%'生成HTML文件名,建立文件夹,指定文件路径fname = makefilename(now() 'makefilename为自定义函数 folder = "newsfile/"&date()&"/"filepath = folder&fname%><%'将接受值及路径保持至数据库表sql = "Select * from c_news"Set rs = Server.CreateObjec
29、t ("ADODB.Recordset")rs.Open sql,conn,3,2rs.addnewrs("c_title")=c_titlers("c_content")=c_contentrs("c_filepath")=filepathrs.updaters.close Set rs = Nothing%><%'打开模板代码,并将其中特殊代码转变为接受值sql1="select m_id,m_html from c_moban where m_id=1"set rs1=
30、Server.CreateObject("adodb.recordset")rs1.open sql1,conn,1,1mb_code=rs1("m_html")rs1.closeset rs1=nothingconn.closeset conn=nothingc_title=htmlencode(c_title)c_content=htmlencode(c_content)mb_code=replace(mb_code,"$cntopLogContentquot;,now()mb_code=replace(mb_code,"$cnl
31、eftLogContentquot;,c_title)mb_code=replace(mb_code,"$cnrightLogContentquot;,c_content)%><%'生成HTML页面Set fso = Server.CreateObject("Scripting.FileSystemObject")fso.CreateFolder(Server.MapPath(folder)Set fout = fso.CreateTextFile(Server.MapPath(filepath)fout.WriteLine mb_codefo
32、ut.close%>文章添加成功,<a href="showit.asp">浏览</a> 推荐精选6,显示数据库表记录,并做指向HTML页的链接:showit.asp引用: 推荐精选<!-#include file="conn.asp" -><!-#include file="lib.asp" -><%Set rs = Server.CreateObject ("ADODB.Recordset")sql = "Select * from c_ne
33、ws order by c_id desc"rs.Open sql,conn,1,1%><%if rs.EOF and rs.BOF thenresponse.write ("暂时还没有文章,<a href=add.html>添加</a>")elseDo Until rs.EOF%><table width="758" border="0" align="center" cellpadding="3" cellspacing="
34、1" bgcolor="#000000"><tr> <td width="159" align="right" bordercolor="#CCCCCC" bgcolor="#CCCCCC"><%=rs("c_time")%></td><td width="591" bordercolor="#f3f3f3" bgcolor="#f3f3f3"&g
35、t;<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=&
36、lt;%=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(&quo
37、t;c_content")%></td></tr></table><br><%rs.MoveNextLoopend if%><%rs.close Set rs = Nothingconn.close set conn=Nothing%>推荐精选7,修改数据内容页change.asp修改数据内容,同时也需要修改更新对应的HTML页面。修改其实就是重新生成文件,且文件名和之前一样,类似文件的覆盖。引用: 推荐精选<!-#include file="conn.asp" -><
38、!-#include file="lib.asp" -><%id=request.querystring("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(
39、"c_filepath")Set rs = Server.CreateObject ("ADODB.Recordset")sql = "Select * from c_news where c_id="&c_idrs.Open sql,conn,3,2rs("c_title")=c_titlers("c_content")=c_contentrs("c_time")=now()rs.updaters.close Set rs = Nothing%><%
40、39;打开模板代码,并将其中特殊代码转变为接受值sql1="select m_id,m_html from c_moban where m_id=1"set rs1=Server.CreateObject("adodb.recordset")rs1.open sql1,conn,1,1mb_code=rs1("m_html")rs1.closeset rs1=nothingconn.closeset conn=nothingc_title=htmlencode(c_title)c_content=htmlencode(c_conten
41、t)mb_code=replace(mb_code,"$cntopLogContentquot;,now()mb_code=replace(mb_code,"$cnleftLogContentquot;,c_title)mb_code=replace(mb_code,"$cnrightLogContentquot;,c_content)%><%'生成HTML页面Set fso = Server.CreateObject("Scripting.FileSystemObject")Set fout = fso.CreateTex
42、tFile(Server.MapPath(c_filepath)fout.WriteLine mb_codefout.close%><%response.redirect("showit.asp")%><%end if%><%if id<>"" thenSet rs = Server.CreateObject ("ADODB.Recordset")sql="select * from c_news where c_id="&idrs.Open sql,conn
43、,1,推荐精选1c_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%>
44、><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&qu
45、ot;><input name="c_id" type="hidden" value="<%=id%>"><input name="c_filepath" type="hidden" value="<%=c_filepath%>"></form>8,删除记录页del.asp同样!删除,除了删除数据库表中的记录,与其对应的HTML页面也需删除。代码如下:引用: <!-#include file="
46、conn.asp" -><%c_id = request.querystring("c_id")sql = "Select * from c_news where c_id="&c_idSet rs = Server.CreateObject ("ADODB.Recordset")rs.Open sql,conn,2,3filepath=rs("c_filepath")Set fso = CreateObject("Scripting.FileSystemObject&quo
47、t;)fso.DeleteFile(Server.mappath(filepath)Set fso = nothingrs.deleters.close Set rs = Nothingconn.closeset conn=nothing%><%response.redirect("showit.asp")%>推荐精选四,其它功能模板管理页面:不会每次都是打开数据库表进行增加或者修改模板代码吧,所以,管理代码的页面程序不能少了,自己捣鼓下应该很简单的。当然,之前管理员的登录认证程序就不在书中交代了:)还有,如果设计了多个模板,那么在发表信息的时候应添加模板选择单选框,同样在执行转换HTML时,SQL选
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论