您的位置:首页 > 编程语言 > ASP

在ASP.NET动态页中生成静态页面

2008-12-04 22:23 363 查看
在有的时候为了提高服务器的性能,在客户端访问动态页面的时候,可以让其访问生成的静态页面(当然也可用缓存,可这样比较耗资源),这样可以大大的提高访问速度,也能减轻服务器的压力。其实在网上搜索一下,便有很多这样的例子,我这里要列出的是,在我们项目中用到的方法。

首先是基类继承至Page类,一般这种类也叫中间类,将共有的功能在此类中实现,然后让其他类去继承,将达到简化代码的目的。

using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
using System.IO;

namespace CommonLib.CreateStatePage
{
public abstract class StatePage:Page
{
private StringWriter htmlPage;
public StatePage()
{ }
protected override void Render(HtmlTextWriter writer)
{
htmlPage = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(htmlPage);
base.Render(htw);
CreatePage(StatePageFilePath());
ReturnPage(StatePageFileUrl());
}

protected override void OnInit(EventArgs e)
{
GetOnInit();
if (!IsRefresh(StatePageFilePath()))
{
ReturnPage(StatePageFileUrl());
}
base.OnInit(e);
}

private void CreatePage(string filePath)
{
StreamWriter filesw = new StreamWriter(filePath, false, Encoding.GetEncoding("UTF-8"));
filesw.Write(htmlPage);
filesw.Close();
}

private bool IsRefresh(string filepath)
{
if (File.Exists(filepath) && GetRefreshMinute() == 0)
{
return false;
}
else if (File.Exists(filepath) && new FileInfo(filepath).LastWriteTime.AddMinutes(GetRefreshMinute()) >= DateTime.Now)
{
return false;
}
else
{
return true;
}
}

private void ReturnPage(string pageUrl)
{
Response.Redirect(pageUrl);
}

protected abstract string StatePageFilePath();

protected abstract string StatePageFileUrl();

protected abstract double GetRefreshMinute();

protected abstract void GetOnInit();

}
}

现在看看子类吧,也就是具体的页面了。

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;

public partial class _Default : CommonLib.CreateStatePage.StatePage
{
private string areaid = "";
protected void Page_Load(object sender, EventArgs e)
{

Label1.Text= DateTime.Now.ToLongDateString()+DateTime.Now.ToLongTimeString();

}

//★★实现父类中的抽象方法,返回具体存放静态页面的文件路径

protected override string StatePageFilePath()
{
return "D://Web//CommonLib//test//aa.htm";
}

//★★实现父类中的抽象方法,返回访问静态页面时的URL

protected override string StatePageFileUrl()
{
return "~/aa.htm";
}

//★★实现父类中的抽象方法,返回多长时间刷新静态页面,单位是分钟

protected override double GetRefreshMinute()
{
return 10;
}

//★★实现父类中的抽象方法,初始化某些资源

protected override void GetOnInit()
{
}
}

经过上面的设置,当我们访问Default.aspx页面时,首先程序会将Default.aspx页面生成aa.htm,并用WEB/aa.heml的虚拟路径映射到此静态页面。并且相隔10分钟之后才会刷新动态页面,这样服务器每隔10分钟才会有一次交互,大大的减轻了服务器的压力哟!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: