ASP.NET生成静态页面实现方法
来源:互联网 发布:软件项目经理工作流程 编辑:程序博客网 时间:2024/05/01 13:33
<!--Main.Aspx-->
<%@ page language="C#" %>
<%@ import namespace=System.IO %>
<script runat="server">
protected override void OnInit (EventArgs e)
{
int id;
try
{
id = int.Parse (Request.QueryString["id"]);
}
catch
{
throw (new Exception ("页面没有指定id"));
}
string filename=Server.MapPath("statichtml_"+id+".html");
//尝试读取已有文件
Stream s = GetFileStream (filename);
if (s != null)//如果文件存在并且读取成功
{
using (s)
{
Stream2Stream (s, Response.OutputStream);
Response.End ();
}
}
//调用Main_Execute,并且获取其输出
StringWriter sw = new StringWriter ();
Server.Execute ("Main_Execute.aspx", sw);
string content = sw.ToString ();
//输出到客户端
Response.Write(content);
Response.Flush();
//写进文件
try
{
using (FileStream fs = new FileStream (filename, FileMode.Create, FileAccess.Write, FileShare.Write))
{
using (StreamWriter streamwriter = new StreamWriter (fs, Response.ContentEncoding))
{
streamwriter.Write (content);
}
}
}
finally
{
//Response.End ();
}
}
static public void Stream2Stream (Stream src, Stream dst)
{
byte[] buf = new byte[4096];
while (true)
{
int c = src.Read (buf, 0, buf.Length);
if(c==0)
return;
dst.Write (buf, 0, c);
}
}
public Stream GetFileStream(string filename)
{
try
{
DateTime dt = File.GetLastWriteTime (filename);
TimeSpan ts=dt - DateTime.Now;
if(ts.TotalHours>1)
return null; //1小时后过期
return new FileStream (filename, FileMode.Open, FileAccess.Read, FileShare.Read);
}
catch
{
return null;
}
}
</script>
<!--Main_Execute.aspx-->
<%@ page language="C#" %>
<html>
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
ID:
<%=Request.QueryString["id"]%>
</body>
</html>
其中原理是这样的.
Main_Execute.aspx是生成HTML的页面.
现在用Main.aspx来对它进行缓存.
过程如下:
首先根据页面参数算出文件名.(这个例子只根据Request.QueryString["id"]来算)
尝试读取缓存的文件.如果成功,那么Response.End();
如果不成功:
使用Server.Execute来调用Main_Execute.aspx,并且获取它的结果内容.
得到内容后,立刻输出到客户端.
最后把内容写进文件里,提供给下一次做为缓存度取.
做网站时,有时为了提高性能会将网站首页生成静态页(当然, Asp.net中页面缓存也是一个不错的选择了
将页面生成静态的方法有多中,据不完全统计有N种(N>1)
以下的方法来自 "孟子E " 解释的方法
代码如下
protected override void Render(HtmlTextWriter writer)
{
System.IO.StringWriter html = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter tw = new HtmlTextWriter(html);
base.Render(tw);
System.IO.StreamWriter sw = new System.IO.StreamWriter(Server.MapPath("index.html"), false, System.Text.Encoding.Default);
sw.Write(html.ToString());
sw.Close();
tw.Close();
Response.Write("页面生成成功!");
}
将以上上函数数加如到你要生成静太文件的页面里,
函数从载了,Render函数 作用是把页面的 html文本截下来,保存到文件里,
进一步的可以去看一下asp.net页面生命过程.
静态页面的生成
protected override void Render(HtmlTextWriter writer) {
StreamWriter r=new StreamWriter(Server.MapPath(StaticFileName),
false,System.Text.Encoding.UTF8); //StaticFileName是html文件名
HtmlTextWriter h=new HtmlTextWriter(r);
base.Render(h);
r.Close();
h.Close();
Response.Redirect(StaticFileName);
}
然后在同一aspx的pageLoad事件中判断StaticFileName是否已经存在,如果存在,就应该直接转向,不应该继续生成页面了。
- ASP.NET生成静态页面实现方法
- ASP.NET生成静态页面实现方法
- ASP.NET生成静态页面实现方法
- ASP.NET生成静态页面实现方法
- ASP.NET生成静态页面实现方法
- ASP.NET生成静态页面实现方法
- ASP.NET生成静态页面实现方法
- ASP.NET生成静态页面实现方法
- ASP.NET生成静态页面实现方法
- ASP.NET生成静态页面实现方法
- Asp.Net生成静态页面的实现方法
- ASP.NET生成静态页面的方法
- ASP.NET生成静态页面的方法
- ASP.NET生成静态页面方法大全
- ASP.NET生成静态页面方法大全
- ASP.NET生成静态页面的方法
- ASP.NET生成静态页面的方法
- ASP.NET生成静态页面方法大全
- mt4中的zigzag
- NtCreatFile函数的参数传递分析 - zl21 - 程序员网志 - Powered By PHPWind.Net
- 博客开张!
- ZK Roadmap 2008
- 杂七杂八(2)——可以把重写看成是对函数的“重新赋值”
- ASP.NET生成静态页面实现方法
- PHP实现HTML转UBB
- dos攻击原理
- 关于黑盒测试
- 先读我吧!
- {js}JavaScript中支持面向对象的基础
- 《深入理解LINUX内存管理》学习笔记(二) 0.01版
- jdk1.5为什么需要使用@Override标记,其作用是什么
- 忘记IBM,联想进入赢利性增长