asp.net生成静态html页

本文介绍了一个ASP.NET Web应用程序的设计实现,该程序能够通过动态加载的方式展示搜索结果,并将这些结果缓存为静态HTML文件以提高后续访问速度。文章详细解释了如何接收查询参数、生成HTML文件、读取和输出缓存文件的过程。

 

Index.aspx 页面  (部份参考网络)

public class index : System.Web.UI.Page
    {
        
private void Page_Load(object sender, System.EventArgs e)
        {
            
// 在此处放置用户代码以初始化页面
            CreateHtml();
        }

        
#region Web 窗体设计器生成的代码
        
override protected void OnInit(EventArgs e)
        {
            
//
            
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
            
//
            InitializeComponent();
            
base.OnInit(e);
        }
        
        
/// <summary>
        
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
        
/// 此方法的内容。
        
/// </summary>
        private void InitializeComponent()
        {    
            
this.Load += new System.EventHandler(this.Page_Load);
        }
        
#endregion
    
        
private void CreateHtml()
        {
            
int first;
            
string wd = "";
             
try
             {
                wd 
= Request.QueryString["wd"].ToString();
               first 
= int.Parse(Request.QueryString["first"]);
             }
             
catch
             {
               
throw (new Exception ("出错了!"));
             }
            
            
string path =  Server.MapPath(@"html"+ wd);
            
//判断文件夹是否存在,不存在则创建文件夹
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);  
//创建文件夹
            } 
            
//Response.Write("<script> alert('"+ path.ToString() +"'); </script>");
             string filename= path+@""+first+".htm";
 
             
//尝试读取已有文件
             Stream s = DataBase.Create.GetFileStream (filename);
             
if (s != null)//如果文件存在并且读取成功
             {
               
using (s)
               {
             DataBase.Create.Stream2Stream (s, Response.OutputStream);
             Response.End ();
               }
             }
              
              
             
//调用s.aspx,并且获取其输出
             StringWriter sw = new StringWriter ();
             Server.Execute (
"s.aspx", sw);  //s.aspx显示搜索结果
              
             
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 ();
             }
        }    
    }

 Create.cs类

public class Create
    {
        
public Create()
        {
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }

        
public static 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 static Stream GetFileStream(string filename)
        {
             
try
             {
               System.DateTime dt 
= File.GetLastWriteTime (filename);
               TimeSpan ts
=dt - System.DateTime.Now;
               
if(ts.TotalHours>1)
             
return null;    //1小时后过期
               return new FileStream (filename, FileMode.Open, FileAccess.Read, FileShare.Read);
             }
             
catch
             {
               
return null;
             }
        }
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值