|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
实现规模效益。与传统的用户拥有硬件软件所有权和使用权以及传统的应用服务商提供一对一的服务模式不同,ASP拥有应用系统所有权,用户拥有使用权,应用系统集中放在ASP的数据中心中,集中管理,分散使用,以一对多的租赁的形式为众多用户提供有品质保证的应用技术服务,实现规模效益。<p> 1、WITHTEMPLET意义是,天生的页面架构将接纳某个已设定的模板,在此之前我的一篇教程中先容过,但愿列位在看本教程之前对ASP接纳模板应熟习下。
2、ASP变化为HTML。不要我再说ASP变化成HTML的优点了吧,个中最值得晓得的就是:静态HTML页和静态页对服务器的请求接受才能小很多,一样,静态HTML搜刮概率远比静态页面的多很多。
那末,我如今必要处置的手艺成绩就是:
1、怎样完成模板手艺?
2、怎样完成2HTML手艺?
3、怎样让模板手艺与2HTML手艺分离?
1、先辈行手艺道理剖析
1、模板手艺参看
2、怎样使得ASP页面变化为HTML?一样平常城市想到FSO组件,由于该组件能新建任何文件格局。
那末其全部运转历程是怎样的呢?
a、供应信息输出页面举行信息搜集;
b、承受信息值先保留数据库,再FSO天生文件;
c、手艺性完成义务,显现刚被创立的HTML文件的路径地点。该手艺的完成过程当中有以下几个难点:
i、FSO天生的文件是间接放在一个年夜文件夹下,仍是独自放在某个逐日更新的子文件夹中?大概表述禁绝确,如许了解吧:信任经由过程FSO天生的文件跟着工夫的推移,文件会愈来愈多,办理也会愈来愈乱……一般你大概看到一些地点诸如www.xxx.com/a/2004-5-20/200405201111.html能够剖析得出应当是创建了以后日期的文件夹。如许,一天就是一个文件夹的页面内容,检察办理也就显得对照公道。
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&".html"
endfunction
%>
援用函数则:<%fname=makefilename(now())%>
实在嘛,就是以年代日时分秒定名的文件。
iv、最初,天生的文件该怎样检察到?固然必要把天生文件的路径保留的数据库中,而且增加到绝对应的纪录会合了。固然,这鄙人面的数据库计划时会说起到。
3、模板手艺和2HTML手艺的分离:将模板中特别代码的值交换为从表单承受过去的值,完成模板功效;将终极交换过的一切模板代码天生HTML文件。必要注重的是:交换应能将输出数据的格局大概撑持UBB的代码完全改动。
2、再举行数据库计划
今朝数据库的计划必要两个表:一个是寄存模板数据的;一个是寄存信息内容的。1,创建新数据库asp2html.mdb
2、计划新数据库表c_moban
字段m_id(主动编号,主关头字);字段m_html(备注范例)。
并将以下完全的代码拷贝至m_html字段
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=hz">
<title>Cnbruce.Com|ASP2HTMLTEST</title>
</head>
<bodyleftmargin="0"topmargin="0">
<tablewidth="100%"height="100%"border="0"cellpadding="5"cellspacing="2">
<tralign="right"bgcolor="#CCCCCC">
<tdheight="20"colspan="2">$cntop{LogContent}lt;/td>
</tr>
<trvalign="top">
<tdwidth="25%"bgcolor="#e5e5e5">$cnleft{LogContent}lt;/td>
<tdwidth="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()
3、页面需求计划
1、起首创建一个寄存HTML页的文件夹
在文件统一目次下,创建文件夹newsfile,夹子外部次要寄存天生的HTML页面,固然外部还会接纳程序体例创建以日期定名的子文件夹,以便利扫瞄和办理。
2、功效函数页面lib.asp
<%
天生文件名的函数
functionmakefilename(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"
endfunction
坚持数据格局稳定的函数
functionHTMLEncode(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
endfunction
%>
3、数据库毗连页面conn.asp
完成数据库的字符串联接办法
<%
setconn=Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.MapPath("asp2html.mdb")
conn.Openconnstr
%>
4、信息输出页面add.html
实在很复杂,就是表单嘛。注重action是跳转到addit.asp
<formaction="addit.asp"method="post">
Title:<inputtype="text"name="c_title"><br>
Content:<br>
<textareaname="c_content"rows="8"cols="30"></textarea><br>
<inputtype="submit"value="Add">
<inputtype="reset"value="Reset">
</form> 5、处置数据功效显现页面addit.asp
起首是处置承受过去的数据,并将值写进数据库;接着将模板代码举行援用,并将个中特别代码转换为承受值,终极经由过程FSO天生HTML页面。个中必要注重的另有,天生文件的路径地点保留至数据库表。
<%容错处置
OnErrorResumeNext
%>
<!--#includefile="conn.asp"-->
<!--#includefile="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*fromc_news"
Setrs=Server.CreateObject("ADODB.Recordset")
rs.Opensql,conn,3,2
rs.addnew
rs("c_title")=c_title
rs("c_content")=c_content
rs("c_filepath")=filepath
rs.update
rs.close
Setrs=Nothing
%>
<%翻开模板代码,并将个中特别代码变化为承受值
sql1="selectm_id,m_htmlfromc_mobanwherem_id=1"
setrs1=Server.CreateObject("adodb.recordset")
rs1.opensql1,conn,1,1
mb_code=rs1("m_html")
rs1.close
setrs1=nothing
conn.close
setconn=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页面
Setfso=Server.CreateObject("Scripting.FileSystemObject")
fso.CreateFolder(Server.MapPath(folder))
Setfout=fso.CreateTextFile(Server.MapPath(filepath))
fout.WriteLinemb_code
fout.close
%>
文章增加乐成,<ahref="showit.asp">扫瞄</a>
6、显现数据库表纪录,并做指向HTML页的链接:showit.asp
<!--#includefile="conn.asp"-->
<!--#includefile="lib.asp"-->
<%
Setrs=Server.CreateObject("ADODB.Recordset")
sql="Select*fromc_newsorderbyc_iddesc"
rs.Opensql,conn,1,1
%>
<%
ifrs.EOFandrs.BOFthen
response.write("临时还没有文章,<ahref=add.html>增加</a>")
else
DoUntilrs.EOF
%>
<tablewidth="758"border="0"align="center"cellpadding="3"cellspacing="1"bgcolor="#000000">
<tr>
<tdwidth="159"align="right"bordercolor="#CCCCCC"bgcolor="#CCCCCC"><%=rs("c_time")%></td>
<tdwidth="591"bordercolor="#f3f3f3"bgcolor="#f3f3f3"><ahref=<%=rs("c_filepath")%>target="a_blank"><%=rs("c_title")%></a></td>
</tr>
<tr>
<tdvalign="top"align="right"bordercolor="#ececec"bgcolor="#ececec">[<ahref=del.asp?c_id=<%=rs("c_id")%>>Dell</a>][<ahref=change.asp?c_id=<%=rs("c_id")%>>Edit</a>][<ahref="add.html">Add</a>]</td>
<tdvalign="top"bordercolor="#FFFFFF"bgcolor="#FFFFFF"><%=htmlencode(rs("c_content"))%></td>
</tr>
</table><br>
<%
rs.MoveNext
Loop
endif
%>
<%
rs.close
Setrs=Nothing
conn.close
setconn=Nothing
%>
7、修正数据内容页change.asp
修正数据内容,同时也必要修正更新对应的HTML页面。修正实在就是从头天生文件,且文件名和之前一样,相似文件的掩盖。
<!--#includefile="conn.asp"-->
<!--#includefile="lib.asp"-->
<%id=request.querystring("c_id")%>
<%
ifrequest.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")
Setrs=Server.CreateObject("ADODB.Recordset")
sql="Select*fromc_newswherec_id="&c_id
rs.Opensql,conn,3,2
rs("c_title")=c_title
rs("c_content")=c_content
rs("c_time")=now()
rs.update
rs.close
Setrs=Nothing
%>
<%翻开模板代码,并将个中特别代码变化为承受值
sql1="selectm_id,m_htmlfromc_mobanwherem_id=1"
setrs1=Server.CreateObject("adodb.recordset")
rs1.opensql1,conn,1,1
mb_code=rs1("m_html")
rs1.close
setrs1=nothing
conn.close
setconn=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页面
Setfso=Server.CreateObject("Scripting.FileSystemObject")
Setfout=fso.CreateTextFile(Server.MapPath(c_filepath))
fout.WriteLinemb_code
fout.close
%>
<%response.redirect("showit.asp")%>
<%endif%>
<%
ifid""then
Setrs=Server.CreateObject("ADODB.Recordset")
sql="select*fromc_newswherec_id="&id
rs.Opensql,conn,1,1
c_id=rs("c_id")
c_filepath=rs("c_filepath")
c_title=rs("c_title")
c_content=rs("c_content")
endif
%>
<formaction="change.asp"method="post">
Title:<inputtype="text"name="c_title"value=<%=c_title%>><br>
Content:<br>
<textareaname="c_content"rows="8"cols="30"><%=c_content%></textarea><br>
<inputtype="submit"value="change"name="submit">
<inputtype="reset"value="Reset">
<inputname="c_id"type="hidden"value="<%=id%>">
<inputname="c_filepath"type="hidden"value="<%=c_filepath%>">
</form>
8、删除纪录页del.asp
一样!删除,除删除数据库表中的纪录,与其对应的HTML页面也需删除。代码以下:
<!--#includefile="conn.asp"-->
<%
c_id=request.querystring("c_id")
sql="Select*fromc_newswherec_id="&c_id
Setrs=Server.CreateObject("ADODB.Recordset")
rs.Opensql,conn,2,3
filepath=rs("c_filepath")
Setfso=CreateObject("Scripting.FileSystemObject")
fso.DeleteFile(Server.mappath(filepath))
Setfso=nothing
rs.delete
rs.close
Setrs=Nothing
conn.close
setconn=nothing
%>
<%response.redirect("showit.asp")%>
4、别的功效
模板办理页面:
不会每次都是翻开数据库表举行增添大概修正模板代码吧,以是,办理代码的页面程序不克不及少了,本人捣鼓下应当很复杂的。固然,之前办理员的登录认证程序就不在书中交卸了:)另有,假如计划了多个模板,那末在宣布信息的时分应增加模板选择单选框,一样在实行转换HTML时,SQL选择的分歧m_id了。
不论怎样说,先把这些手艺本人调试感觉下。多多操纵,信任“念书千遍,其意自见”。asp是基于web的一种编程技术,可以说是cgi的一种。它可以完成以往cgi程序的所有功能,如计数器、留言簿、公告板、聊天室等等。 |
|