在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分钟才会有一次交互,大大的减轻了服务器的压力哟!
首先是基类继承至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分钟才会有一次交互,大大的减轻了服务器的压力哟!
相关文章推荐
- ASP.NET 生成HTML静态页面实例
- asp.net生成html静态页面
- asp.net静态页面引用动态页
- ASP.NET生成静态页面
- asp.net(c#)生成静态html页面
- asp.net生成静态页面之简化版
- asp.net生成html静态页面
- 事件驱动asp.net自动生成静态页面模板解决方法——生成静态页面
- ASP.NET生成静态页面
- [转贴]ASP.Net生成静态HTML页面
- asp.net中将DataTable根据xslt生成html静态页面,支持分页
- C#(asp.net)根据静态模板生成静态(html)页面
- ASP.NET生成静态页面,标签替换方法
- ASP.NET 生成静态页面 实现思路
- ASP.Net生成静态页面 C# 静态页面
- asp.net生成静态页面、伪静态、页面重定向
- ASP.NET生成静态HTML页面并分别按年月目录存放[来自:中国站长站]
- ASP.NET 生成HTML静态页面实例
- 使用ASP.NET模板生成HTML静态页面的五种方案
- 使用ASP.NET模板生成HTML静态页面的五种方案