对于Web开发人员来说,生成静态文件这个概念并不陌生。

对于Web开发来说,如何能避免客户端访问时不停的查询数据库?现在比较常用的有两种方法,一种是使用缓存技术,将查询出来的结果缓存至缓存框架中,以后当有用户访问时,直接通过缓存框架读取数据,这样就避免了大量用户同时访问数据库。另一种方法就是使用静态生成技术,静态生成技术常见的做法有两种,一种是通过模板文件(模板文件中保存好前期定义好的变量,后台通过数据加载对相应变量进行替换,然后再对替换完的数据进行生成静态文件);一种是直接访问Web地址,通过Http协议读取网页内容,然后再将内容生成相应的静态文件。

对于像Java、.NET这些语言来说,外界都会给出相应的缓存框架,Java的缓存框架就更多了。但对Asp这样的低端语言来说呢,只能通过用静态生成技术来实现减少用户大量的数据访问,本文就结合自己准备要做的项目来谈谈Asp如何实现静态生成。

Asp静态生成技术的原理上面我已经讲过了,两种做法最终都会通过读取HTML文件(或动态或模板文件)来生成相应的静态页面。

方法一:通过模板文件来实现静态化:

如题所示,通过模板文件实现静态化,当然首先要创建相应的模板文件,我的模板文件如下template.htm:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title><#PageTitle#></title>
</head>

<body>
 <#article:title#>
 <#article:content#>
</body>
</html>

注意:我使用<#article:title#>做为变量,这样的话,在进行文件替换的时候我就会查询包含此变量的内容进行替换。

模板文件创建后,就是静态化处理的核心部分,代码如下:

<%
filename="Template.htm"
'tt.txt是模板文件
Dim objFSO,objCountFile,FiletempData 
' 创建FSO文件对象
Set objFSO = Server.CreateObject("Scripting.FileSystemObject") 
Set objCountFile = objFSO.OpenTextFile(Server.MapPath(filename),1,True) 
FSOFileRead = objCountFile.ReadAll 
'response.write FSOFileRead&"<br>"
FSOFileRead = replace(FSOFileRead,"<#PageTitle#>","杰之蓝")
FSOFileRead = replace(FSOFileRead,"<#article:title#>","杰之蓝Asp静态生成技术")
FSOFileRead = replace(FSOFileRead,"<#article:content#>","杰之蓝Asp静态生成技术详细内容。")
Response.write FSOFileRead
objCountFile.Close

Set fso = Server.CreateObject("Scripting.FileSystemObject")
'fso.CreateFolder(Server.MapPath(folder)) 创建文件夹
Set fout = fso.CreateTextFile(Server.MapPath("aaa.html"))
fout.WriteLine FSOFileRead
fout.close

%>

请注意:<#PageTitle#>,<#article:title#>,<#article:content#>这三个变量为我在模板页面中使用,此处将这些变量变成真实的值;对文件替换完成后,就对进行文件的创建,此处要求您的服务器可以使用FSO对象,我将文件生成后放在于模板文件同级的目录下,当然如果你要创建在别的目录下的时候你就要将创建文件夹那个注释放开,然后添加上你自己的目录;文件创建完成后一定记得关闭FSO对象。

方法二:读取Url地址生成静态文件

这种方法就像上面所说的是通过读取URL地址,然后提取URL地址中的内容,最后再生成相应的静态文件。

下面来看具体代码:

<%
'///////////////////////////////////////////////////////////////////////////////
'//              ASP生成静态
'// 作    者:    杰之蓝
'// 版权所有:    www.52cfml.com
'// 技术支持:    www.52cfml.com
'// 开始时间:    2010-07-16
'// 最后修改:    
'// 备    注:    
'///////////////////////////////////////////////////////////////////////////////

response.write "<textarea cols=""79"" rows=""30"">"&GetHttpPage(("http://www.52cfml.com/"),"gb2312")&"</textarea>"

'函数名:GetHttpPage
'作 用:获取网页源码
'参 数:HttpUrl ------网页地址,Cset 编码
'===============================================
Function GetHttpPage(ByVal URL, ByVal Cset)
 Dim BlockStartTime
 On Error Resume Next
 Dim Http
 If IsNull(URL)=True Or Len(URL)<18 Or URL="$False$" Then
    GetHttpPage="$False$"
    Exit Function
 End If
 BlockStartTime = Timer()
 Set Http=server.createobject("MSXML2.XMLHTTP")
 Http.open "GET",URL,False
 Http.Send()
 '循环等待数据接收
 Dim temp,BlockTimeout 
 BlockTimeout = 64
 While (http.ReadyState <> 4)
 ' 判断是否块超时
    temp = Timer() - BlockStartTime
    Response.Write(Timer())
    If (temp > BlockTimeout) Then
  http.abort
  Set Http=Nothing 
  GetHttpPage="$False$"
  Exit function
  Response.End
    End If
    http.waitForResponse 10000'等待1000毫秒
 Wend
 
 If Http.Readystate<>4 then
    Set Http=Nothing 
    GetHttpPage="$False$"
    Exit function
 End If
 GetHTTPPage=BytesToBstr(Http.responseBody,Cset)
 Set Http=Nothing

If Err.number<>0 then
    If IsNull(URL)=True Or Len(URL)<18 Or URL="$False$" Then
  GetHttpPage="$False$"
  Exit Function
    End If
    Set Http=Nothing
    Err.Clear
 End If

End Function

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
%>

上述两种方法都可以生成静态文件,只不过每种方法的侧重点不同,有需要的朋友可以根据自己的需要选择相应的方法,当然真实环境下必须有数据库的支持,由于本文只是例子,就没有结合数据库实现,有需要的朋友可以根据自己的需要建立相应的数据库,对于方法一来说,模板变量的命名必须是前期定义好的。

ASP专栏——ASP生成静态文件(用于大量文章)的更多相关文章

  1. 基于 Vue.js 之 iView UI 框架非工程化实践记要 使用 Newtonsoft.Json 操作 JSON 字符串 基于.net core实现项目自动编译、并生成nuget包 webpack + vue 在dev和production模式下的小小区别 这样入门asp.net core 之 静态文件 这样入门asp.net core,如何

    基于 Vue.js 之 iView UI 框架非工程化实践记要   像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引 ...

  2. ASP.NET Core使用静态文件、目录游览与MIME类型管理

    前言 今天我们来了解了解ASP.NET Core中的静态文件的处理方式. 以前我们寄宿在IIS中的时候,很多静态文件的过滤 和相关的安全措施 都已经帮我们处理好了. ASP.NET Core则不同,因 ...

  3. phpcms V9 修改生成静态文件路径/html

    在论坛看到部分用户反馈这个问题,要修改的其实是html_root的值,默认是"/html"如果要生成在网站根目录的话,这个值则要为空.论坛上现在看到的办法是打开caches\con ...

  4. 用include()和ob_get_contents( )方法 生成静态文件

    1. 生成静态文件可以在打开缓冲区的前提下,用include()方法去包含要执行的动态文件,这样该动态文件就会在缓冲区中执行,执行完毕后的静态HTML代码就保存在缓冲区中,然后用ob_get_cont ...

  5. [js高手之路]Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件

    接着这篇文章[js高手之路]Node.js+jade抓取博客所有文章生成静态html文件继续,在这篇文章中实现了采集与静态文件的生成,在实际的采集项目中, 应该是先入库再选择性的生成静态文件.那么我选 ...

  6. ASP生成静态文件编码为UTF-8格式的HTML文件

    一般在ASP环境下,运行动生静操作时都用到的是FSO,FSO是专门对文件进行操作的一个组件,FSO的编码属性只有三种,系统默认,Unicode,ASCII,并没有utf-8,所以一般中文系统上使用FS ...

  7. asp.net core 控制静态文件的授权

    静态文件访问在网站中是一项重要的服务,用于向前端提供可以直接访问的文件,如js,css,文档等,方法是在Startup的Configure中添加UseStaticFiles()管道. 参考:ASP.N ...

  8. 这样入门asp.net core 之 静态文件

    本文章主要说明asp.net core中静态资源处理方案: 一.静态文件服务 首先明确contentRoot和webroot这两个概念 contentRoot:web的项目文件夹,其中包含webroo ...

  9. ASP.NET MVC生成静态页面

    1.先付上封装好生成静态页的原代码: public class Common { #region 获取模板页的Html代码 /// <summary> /// 获取页面的Html代码 // ...

随机推荐

  1. [JavaEE] applicationContext.xml配置文件使用合集

    配置实例 – 1 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http ...

  2. oracle日志总结

    ①. Oracle日志分类: Alert log files--警报日志 , redo log 重做日志(记录数据库的更改,Trace files--跟踪日志(用户和进程) Oracle的重做日志(r ...

  3. iOS 设计模式之单例

    设计模式:单例 一.  单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并 ...

  4. [置顶] 《算法导论》习题解答搬运&&学习笔记 索引目录

    开始学习<算法导论>了,虽然是本大部头,可能很难一下子看完,我还是会慢慢地研究的. 课后的习题和思考有些是很有挑战性的题目,我等蒻菜很难独立解决. 然后发现了Google上有挺全的algo ...

  5. 跨域iframe高度自适应(兼容IE/FF/OP/Chrome)

    采用JavaScript来控制iframe元素的高度是iframe高度自适应的关键,同时由于JavaScript对不同域名下权限的控制,引发出同域.跨域两种情况. 由于客户端js使用浏览器的同源安全策 ...

  6. 每天一个Linux命令(1):ls命令

    转自http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html ls命令是Linux下最常用的命令.ls命令就是list的缩写,缺省下ls ...

  7. 剑指Offer42 左旋字符串

    /************************************************************************* > File Name: 42_LeftRo ...

  8. itunes connect提交app教程

    .打开itunes connect登陆之后,选择Manage Your Apps,再选Add New App: .填写项目相关信息,不知道怎么填的点击问号查看: Bundle ID Suffix需要和 ...

  9. 10 Best TV Series Based On Hacking And Technology

    Technology is rapidly becoming the key point in human lives. Here we have discussed top TV shows whi ...

  10. [转]移动App测试中的最佳做法

    Daniel Knott 用过各种不同编程语言和软件质量保证工具.他在软件开发和测试方面干了七年,自2010年起,他一直在德国汉堡的XING AG公司就职,几个项目里,比如XING调查和XING建议, ...