asp.net页面静态化

将asp.net页面静态化有很大意义,在些我就不多说了,实现asp.net页面静态化有很多种方面,在此我介绍一种在asp.net内实现的方法。大家都知道,每个asp.net页面都有一个特定的类对其进行处理,默认情况下该类是从Page类派生的。我们所要做的就是从Page类派生自己的类改写特定的方法。具体实现如下:
using
System;
using
System.Data;
using
System.Configuration;
using
System.Linq;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.HtmlControls;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Xml.Linq;
using
System.IO;
public class FreezablePage : System.Web.UI.Page { //
When Asp.Net renders the page the Page.Render method is invoked
// Override the method to hook in


protected void Page_Load(object sender, EventArgs e)
{
//
Response.HeaderEncoding = System.Text.Encoding.UTF8;
//Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");


Freeze(
string.Format(@"{0}.htm", Request.Url.ToString()));
}
protected override void
Render(HtmlTextWriter writer)
{
if
(freeze)
{
MyHtmlFileCreator htmlFile
= new
MyHtmlFileCreator();
// Let Asp.net render the output, catch it in the file creator

base.Render(htmlFile.RenderHere);
newUrl
=
HttpContext.Current.Request.Url.AbsolutePath.ToString();
newUrl
= newUrl.Replace(".aspx", ".htm"
);
//
Response.HeaderEncoding = System.Text.Encoding.UTF8;
//Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); // Write new html file

htmlFile.WriteHTMLFile(Server.MapPath(newUrl));
// Redirect


Response.Redirect(newUrl,
true);
}
else

{
// Default behavior
base.Render(writer);
}
}
// Flag render event

protected void Freeze()
{
freeze
= true
;
}
protected void Freeze(string
toUrl)
{
freeze
= true
;
NewUrl
=
toUrl;
}
private bool freeze = false
;
private string
newUrl;
internal string
NewUrl
{
get

{
return newUrl;
}
set

{
newUrl
= value;
}
}
}
internal class
MyHtmlFileCreator
{
private
StringWriter html;
private
MyHtmlTextWriter htmlWriter;
//
override the HtmlTextWriter to reach the constructor
// the constructor in the base class is protected

class MyHtmlTextWriter : HtmlTextWriter
{
internal MyHtmlTextWriter(TextWriter tw) : base
(tw) { }
}
// publish the HTMLwriter

internal HtmlTextWriter RenderHere
{
get { return
htmlWriter; }
}
//
constructor initializes stringwriter and htmlwriter based on that
// initialize Url

internal MyHtmlFileCreator()
{
html
= new
StringWriter();
htmlWriter
= new
MyHtmlTextWriter(html);
}
internal void WriteHTMLFile(string
virtualFileName)
{
//
Stringreader reads output rendered by asp.net
// Stringwriter writes html output file

StringReader sr = new StringReader(html.ToString());
StringWriter sw
= new
StringWriter();
// Read from input

string htmlLine = sr.ReadLine();
while (htmlLine != null
)
{
//// Filter out ASp.net specific tags

//if (!((htmlLine.IndexOf("<form") > 0) ||
//
(htmlLine.IndexOf("__VIEWSTATE") > 0) ||
//
(htmlLine.IndexOf("</form>") > 0)))
//{ sw.WriteLine(htmlLine); }

sw.WriteLine(htmlLine);
htmlLine
=
sr.ReadLine();
}
// Write contents stringwriter to html file

StreamWriter fs = new StreamWriter(virtualFileName,false,System.Text.Encoding.UTF8);
//StreamWriter f=new StreamWriter(

fs.Write(sw.ToString());
fs.Close();
}
}
posted @ 2009-03-11 23:22  silverPerson  阅读(842)  评论(1编辑  收藏  举报