★33°空間‰


                                 ----★七彩服飾  【最潮拜☆日單精品】【Esprit】【Hotwind】滿150包郵-女裝-流行女裝    www.7color.hb.cn

                                 ----智力比知識(shí)重要,素質(zhì)比智力重要,覺(jué)悟比素質(zhì)更重要
          posts - 110,comments - 35,trackbacks - 0

          <!--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 ("頁(yè)面沒(méi)有指定id"));
            }
           
            string filename=Server.MapPath("statichtml_"+id+".html");
           
            //嘗試讀取已有文件
            Stream s = GetFileStream (filename);
            if (s != null)//如果文件存在并且讀取成功
            {
              using (s)
              {
                Stream2Stream (s, Response.OutputStream);
                Response.End ();
              }
            }
           
           
            //調(diào)用Main_Execute,并且獲取其輸出
            StringWriter sw = new StringWriter ();
            Server.Execute ("Main_Execute.aspx", sw);
           
            string content = sw.ToString ();
           
            //輸出到客戶端
            Response.Write(content);
            Response.Flush();
           
            //寫(xiě)進(jìn)文件
           
            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小時(shí)后過(guò)期
              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的頁(yè)面.

          現(xiàn)在用Main.aspx來(lái)對(duì)它進(jìn)行緩存.
          過(guò)程如下:

          首先根據(jù)頁(yè)面參數(shù)算出文件名.(這個(gè)例子只根據(jù)Request.QueryString["id"]來(lái)算)
          嘗試讀取緩存的文件.如果成功,那么Response.End();
          如果不成功:
          使用Server.Execute來(lái)調(diào)用Main_Execute.aspx,并且獲取它的結(jié)果內(nèi)容.
          得到內(nèi)容后,立刻輸出到客戶端.
          最后把內(nèi)容寫(xiě)進(jìn)文件里,提供給下一次做為緩存度取. 

          posted on 2007-04-11 17:50 圣域飛俠 閱讀(521) 評(píng)論(1)  編輯  收藏 所屬分類: 轉(zhuǎn)載

          FeedBack:
          # re: ASP.NET生成靜態(tài)頁(yè)面實(shí)現(xiàn)方法
          2007-04-25 11:13 | 在天
          很不多,,我想批量生成,,可以給個(gè)demo嗎?  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 新化县| 常宁市| 姚安县| 六安市| 双城市| 灵武市| 类乌齐县| 泸州市| 武强县| 嵩明县| 桓台县| 平凉市| 镇赉县| 丹寨县| 宁夏| 三原县| 奎屯市| 嘉兴市| 福泉市| 靖西县| 仁布县| 梧州市| 高要市| 天门市| 旌德县| 兴义市| 孟州市| 沂源县| 江城| 富源县| 阿拉善盟| 遂昌县| 临桂县| 清苑县| 仁化县| 东乌珠穆沁旗| 平遥县| 江口县| 江油市| 富平县| 宁安市|