国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

技巧實例:ASP.NET生成靜態頁面實現方法

2024-07-10 13:08:22
字體:
來源:轉載
供稿:網友

<!--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.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,并且獲取它的結果內容。

  得到內容后,立刻輸出到客戶端。

  最后把內容寫進文件里,提供給下一次做為緩存度取。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 策勒县| 凤山县| 辽源市| 文山县| 天峻县| 玉田县| 山阳县| 沈丘县| 南投市| 陵川县| 泗阳县| 张家川| 遵义市| 曲水县| 宾川县| 呈贡县| 高州市| 台前县| 武冈市| 开原市| 芦山县| 安庆市| 东方市| 邢台县| 威海市| 晴隆县| 衢州市| 仁怀市| 东至县| 临猗县| 吉林省| 米林县| 招远市| 南靖县| 澎湖县| 固始县| 延长县| 读书| 宜阳县| 图木舒克市| 万源市|