ASP.NET生成HTML静态页的一个类

来源:百度文库 编辑:神马文学网 时间:2024/04/25 23:34:35
 
C#代码
  1. using System;   
  2. using System.Collections.Generic;   
  3. using System.Linq;   
  4. using System.Web;   
  5. using System.Net;   
  6. using System.IO;   
  7. using System.Text;   
  8. using System.Web.UI.HtmlControls;   
  9. using System.Text.RegularExpressions;   
  10.   
  11. ///   
  12. ///CreateHtml 的摘要说明   
  13. ///
  14.   
  15. public class CreateHtml:System.Web.UI.Page   
  16. {   
  17.     public CreateHtml()   
  18.      {   
  19.         //   
  20.         //TODO: 在此处添加构造函数逻辑   
  21.         //   
  22.      }   
  23.     ///   
  24.     /// 生成静态页面,生成位置是本项目下   
  25.     ///
  26.   
  27.     /// 请求的URL   
  28.     /// 创建的路径及文件名,路径为相对路径   
  29.     public bool Nei_Create(string strURL, string strRelPath)   
  30.      {   
  31.         string   strFilePage;   
  32.          
  33.          strFilePage = HttpContext.Current.Server.MapPath(strRelPath);   
  34.          StreamWriter sw = null;   
  35.         //获得aspx的静态html   
  36.         try  
  37.          {   
  38.                
  39.             if (File.Exists(strFilePage))   
  40.              {   
  41.                  File.Delete(strFilePage);   
  42.              }   
  43.              sw = new StreamWriter(strFilePage, false, System.Text.Encoding.GetEncoding("gb2312"));   
  44.              System.Net.WebRequest wReq = System.Net.WebRequest.Create(strURL);   
  45.              System.Net.WebResponse wResp = wReq.GetResponse();   
  46.              System.IO.Stream respStream = wResp.GetResponseStream();   
  47.              System.IO.StreamReader reader = new System.IO.StreamReader(respStream, System.Text.Encoding.GetEncoding("gb2312"));   
  48.             string strTemp = reader.ReadToEnd();   
  49.   
  50.              Regex r1 = new Regex("", RegexOptions.IgnoreCase);   
  51.              Regex r2 = new Regex("", RegexOptions.IgnoreCase);   
  52.              Regex r3 = new Regex("", RegexOptions.IgnoreCase);   
  53.   
  54.              Regex r4 = new Regex("
    ", RegexOptions.IgnoreCase);   
  55.              Regex r5 = new Regex("");   
  56.   
  57.              Regex r6 = new Regex("", RegexOptions.IgnoreCase);   
  58.              strTemp = r1.Replace(strTemp, "");   
  59.              strTemp = r2.Replace(strTemp, "");   
  60.              strTemp = r3.Replace(strTemp, "");   
  61.              strTemp = r4.Replace(strTemp, "");   
  62.              strTemp = r5.Replace(strTemp, "");   
  63.              strTemp = r6.Replace(strTemp, "");   
  64.   
  65.              sw.Write(strTemp);   
  66.          }   
  67.         catch (Exception ex)   
  68.          {   
  69.              HttpContext.Current.Response.Write(ex.Message);   
  70.              HttpContext.Current.Response.End();   
  71.             return false;//生成到出错   
  72.          }   
  73.         finally  
  74.          {   
  75.              sw.Flush();   
  76.              sw.Close();   
  77.              sw = null;   
  78.          }   
  79.   
  80.         return true;   
  81.      }   
  82.     ///   
  83.     /// 生成静态页面,生成位置不在本项目下   
  84.     ///
  85.   
  86.     /// 请求的URL   
  87.     /// 创建的路径及文件名,路径为绝对路径   
  88.     public bool Wai_Create(string strURL, string strRelPath,string filename)   
  89.      {   
  90.         string strFilePage;   
  91.          strFilePage = strRelPath + "\\" + filename;   
  92.          StreamWriter sw = null;   
  93.         //获得aspx的静态html   
  94.         try  
  95.          {   
  96.             if (!Directory.Exists(strRelPath))   
  97.              {   
  98.                  Directory.CreateDirectory(strRelPath);   
  99.              }   
  100.             if (File.Exists(strFilePage))   
  101.              {   
  102.                  File.Delete(strFilePage);   
  103.              }   
  104.              sw = new StreamWriter(strFilePage, false, System.Text.Encoding.GetEncoding("gb2312"));   
  105.              System.Net.WebRequest wReq = System.Net.WebRequest.Create(strURL);   
  106.              System.Net.WebResponse wResp = wReq.GetResponse();   
  107.              System.IO.Stream respStream = wResp.GetResponseStream();   
  108.              System.IO.StreamReader reader = new System.IO.StreamReader(respStream, System.Text.Encoding.GetEncoding("gb2312"));   
  109.             string strTemp = reader.ReadToEnd();   
  110.   
  111.              Regex r1 = new Regex("", RegexOptions.IgnoreCase);   
  112.              Regex r2 = new Regex("", RegexOptions.IgnoreCase);   
  113.              Regex r3 = new Regex("", RegexOptions.IgnoreCase);   
  114.   
  115.              Regex r4 = new Regex("
    ", RegexOptions.IgnoreCase);   
  116.              Regex r5 = new Regex("");   
  117.   
  118.              Regex r6 = new Regex("", RegexOptions.IgnoreCase);   
  119.              strTemp = r1.Replace(strTemp, "");   
  120.              strTemp = r2.Replace(strTemp, "");   
  121.              strTemp = r3.Replace(strTemp, "");   
  122.              strTemp = r4.Replace(strTemp, "");   
  123.              strTemp = r5.Replace(strTemp, "");   
  124.              strTemp = r6.Replace(strTemp, "");   
  125.   
  126.              sw.Write(strTemp);   
  127.          }   
  128.         catch (Exception ex)   
  129.          {   
  130.              HttpContext.Current.Response.Write(ex.Message);   
  131.              HttpContext.Current.Response.End();   
  132.             return false;//生成到出错   
  133.          }   
  134.         finally  
  135.          {   
  136.              sw.Flush();   
  137.              sw.Close();   
  138.              sw = null;   
  139.          }   
  140.   
  141.         return true;   
  142.   
  143.      }   
  144.     public void FilePicDelete(string path)   
  145.      {   
  146.          System.IO.FileInfo file = new System.IO.FileInfo(path);   
  147.         if (file.Exists)   
  148.              file.Delete();   
  149.      }   
  150. }  
  151. 用法:
    C#代码
    1. new CreateHtml().Nei_Create("http://localhost:4032/new5mdn/default.aspx", "default.htm");  
    2. 最近学院网站要改版,于是有了这个想法,将首页生成静态文件,以提高访问速度。初步想法如下(只适应于首页静态文件生成):
      IIS中设置默认文档顺序为index.html,default.aspx
      然后重写default.aspx的render方法


      protected override void Render(HtmlTextWriter writer)  
      { //这是默认的Render实现,直接输出到writer中
      //base.Render(writer);
      StringWriter html = new StringWriter();
      HtmlTextWriter tw = new HtmlTextWriter(html);
      //通过base.Render()方法,把生成的HTML写入到我们定义的tw中
      base.Render(tw);
      string path = Server.MapPath("index.html");
      StreamWriter sw = new StreamWriter(path, false, System.Text.Encoding.Default);
      //写入到文件中
      sw.Write(html.ToString());
      sw.Close();
      //写入到writer中,以输出页面的HTML
      //注意,这里不能再调用base.Render(writer),会出现错误
      writer.Write(html.ToString());
      }



      这样在每次访问default.aspx的时候会在同目录下生成index.html文件,而一般用户访问时都会直接输入域名,如http://domain.com 这样由于iis中的设置,用户默认访问到的都是index.html静态页面,应该能有效提高首页打开速度。因为首页更新不会太快,添加了新闻或其它在首页显示的内容的时候可以手动访问一下http://domain.com/default.aspx 这个页来重新生成index.html,或者在发布新闻后自动访问一下default.aspx页,这样就能做到index.html页内容及时更新,这种方法应该比outputcache更好,问题也会少。当然前提是首页没有各种postback事件,有登录框倒好办,直接把登录框改为常规的hmtl form,用post的方式post到登录页。