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

ASP.NET生成静态页面实现方法

2007-01-05 10:21 756 查看

<!--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>

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息