越来越多的企业开始关注网站建设,而ASP作为微软公司推出的一种服务器端脚本环境,以其强大的功能、良好的兼容性和丰富的组件库,受到了广大开发者的喜爱。在网站建设过程中,如何将ASP动态页面转换为静态源码,以提高网站性能和安全性,成为了一个亟待解决的问题。本文将探讨ASP生成静态源码的技术原理、方法及其在行业中的应用。
一、ASP生成静态源码的技术原理
1. ASP动态页面与静态源码的区别
ASP动态页面是指利用ASP技术编写的服务器端脚本程序,当用户请求该页面时,服务器会根据用户输入的参数,动态生成HTML代码,并返回给用户。而静态源码则是指HTML、CSS、JavaScript等静态文件组成的网页,其内容在用户访问时不会发生变化。
2. ASP生成静态源码的技术原理
ASP生成静态源码主要基于以下两种技术:
(1)服务器端脚本解析:ASP页面在服务器端运行时,由IIS(Internet Information Services)服务器对ASP脚本进行解析,生成对应的HTML代码。
(2)静态化工具:利用静态化工具,如HtmlAgilityPack等,将解析后的HTML代码进行进一步处理,生成可独立访问的静态源码。
二、ASP生成静态源码的方法
1. 使用ASP内置组件
ASP内置组件如Server.Transfer、Server.Execute等可以实现动态页面到静态页面的转换。以下是一个简单的示例:
```asp
<%@ Page Language=\
网页生成静态Html文件有许多好处,比如生成html网页有利于被搜索引擎收录,不仅被收录的快还收录的全.前台脱离了数据访问,减轻对数据库访问的压力,加快网页打开速度.
像www.aspid.cn的主站就采用了TSYS生成html文件!
所以吟清最近对生成html比较感兴趣,看了不少文章,也有一点点收获.
1,下面这个例子直接利用FSO把html代码写入到文件中然后生成.html格式的文件 <%
filename="test.htm"
if request("body")<>"" then
set fso = Server.CreateObject("Scripting.FileSystemObject")
set htmlwrite = fso.CreateTextFile(server.mappath(""&filename&""))
htmlwrite.write "<html><head><title>" & request.form("title") & "</title></head>"
htmlwrite.write "<body>输出Title内容: " & request.form("title") & "<br /> 输出Body内容:" & 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">Body</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 <%
Dim fso,htmlwrite
Dim strTitle,strContent,strOut
'// 创建文件系统对象
Set fso=Server.CreateObject("Scripting.FileSystemObject")
'// 打开网页模板文件,读取模板内容
Set htmlwrite=fso.OpenTextFile(Server.MapPath("Template.htm"))
strOut=f.ReadAll
htmlwrite.close
strTitle="生成的网页标题"
strContent="生成的网页内容"
'// 用真实内容替换模板中的标记
strOut=Replace(strOut,"$title$",strTitle)
strOut=Replace(strOut,"$body$",strContent)
'// 创建要生成的静态页
Set htmlwrite=fso.CreateTextFile(Server.MapPath("test.htm"),true)
'// 写入网页内容
htmlwrite.WriteLine strOut
htmlwrite.close
Response.Write "生成静态页成功!"
'// 释放文件系统对象
set htmlwrite=Nothing
set fso=Nothing
%>
3,第三种方法就是用XMLHTTP获取动态页生成的HTML内容,再用ADODB.Stream或者Scripting.FileSystemObject保存成html文件。这句话是在蓝色理想上看到的,对XMLHTTP吟清还不熟悉正在找资料了解.找到一段XMLHTTP生成Html的代码参考一下.
<%
'常用函数
'1、输入url目标网页地址,返回值getHTTPPage是目标网页的html代码
function getHTTPPage(url)
dim Http
set Http=server.createobject("MSXML2.XMLHTTP")
Http.open "GET",url,false
Http.send()
if Http.readystate<>4 then
exit function
end if
getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")
set http=nothing
if err.number<>0 then err.Clear
end function
'2、转换乱玛,直接用xmlhttp调用有中文字符的网页得到的将是乱玛,可以通过adodb.stream组件进行转换
Function BytesToBstr(body,Cset)
dim objstream
set objstream = Server.CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset = Cset
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function
txtURL=server.MapPath("../index.asp")
sText = getHTTPPage(txtURL)
Set FileObject=Server.CreateObject("Scripting.FileSystemObject")
filename="../index.htm"
Set openFile=FileObject.OpenTextfile(server.mapPath(filename),2,true) 'true为不存在自行建立
openFile.writeline(sText)
Set OpenFile=nothing
%>
<script>
alert("静态网页生成完毕");
history.back();
</script>
随着网站访问量的加大,每次从数据库读取都是以效率作为代价的,很多用ACCESS作数据库的更会深有体会,静态页面在搜索时,也会被优先考虑。互联网上流行的做法是将数据源代码写入数据库再从数据库读取生成静态面,这样无形间就加大了数据库。将现有的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_Temp
Html_Temp=<UL>
For i=1 To 3
Html_Temp = Html_Temp&<LI>
Item_Classid = i
FileName = Index&Item_Classid&.htm
FilePath = Server.MapPath(/)&\&FileName
Html_Temp = Html_Temp&FilePath&</LI>
Do_Url = 你的网站地址
Do_Url = Do_Url&Request.ServerVariables(SERVER_NAME)&/main/index.asp
Do_Url = Do_Url&?Item_Classid=&Item_Classid
strUrl = Do_Url
dim objXmlHttp
set objXmlHttp = Server.CreateObject(Microsoft.XMLHTTP)
objXmlHttp.open GET,strUrl,false
objXmlHttp.send()
Dim binFileData
binFileData = objXmlHttp.responseBody
Dim objAdoStream
set objAdoStream = Server.CreateObject(ADODB.Stream)
objAdoStream.Type = 1
objAdoStream.Open()
objAdoStream.Write(binFileData)
objAdoStream.SaveToFile FilePath,2
objAdoStream.Close()
Next
Html_Temp = Html_Temp&<UL>
%>
<%
Response.Write ( 成功生成文件: )
Response.Write ( <BR> )
Response.Write Html_Temp
%>
方法2:
模板文件与数据替换法,这是一种更为方便的生成静态页面的方法,方法是先建立一个或者多个以html为基础的模板文件,在文件中用特殊字符串代表要替换的变量值,然后用查询与替换的方法把数据库中的值替换相应字符串,生成.html的全静态页面。
也不是个难事,原理很简单。会用VB做记事本么,实际上跟这个一样,就是做一个保存纯文本文件的功能,调用FSO即可。如下:
<%
Set fso=CreateObject("Scripting.FileSystemObject")
NewFile=Server.MapPath("/html/文件名.html")
'HTML文件的位置
Set t=fso.CreateTextFile(NewFile, True)
t.close
'新建了一个空白的纯文本文件
File=Server.MapPath("/html/文件名.html")
Set txt=fso.OpenTextFile(File,8,True)'打开刚才创建的纯文本文件
txt.Write "<html><head><title>这是一个静态页面</title></head><body>这里就是静态页面的内容了</body></html>"
'写入内容
txt.Close
'OK了,就这么简单
%>
创建的纯文本文件的位置根据你自己需要调整吧,写入到静态页面里的内容也可以加入动态获取的内容,比如从数据库里读取的部分,比如"<title>"&rs("数据库标题")&"</title>"。至于要使静态页面的代码能换行,加入换行符比如"<html>"&chr(13)&chr(10)&"<head>"即可,这样生成出来的HTML页面的代码就错落有致了。
相信你有一定的ASP基础,肯定能看得懂!
文章已关闭评论!
2025-05-09 23:05:13
2025-05-09 22:45:22
2025-05-09 22:33:25
2025-05-09 22:22:51
2025-05-09 22:01:11
2025-05-09 21:15:02
2025-05-09 21:02:22
2025-05-09 20:43:13