如何生成静态页


方案1
/// <summary>
///
传入URL返回网页的html代码
/// </summary>
/// <param name="Url">URL</param>
/// <returns></returns>
public static   string getUrltoHtml(string Url)
{
errorMsg = "";
try
{
System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);
// Get the response instance.
System.Net.WebResponse wResp =wReq.GetResponse();
// Read an HTTP-specific property
//if (wResp.GetType() ==HttpWebResponse)
//{
//DateTime updated   =((System.Net.HttpWebResponse)wResp).LastModified;
//}
// Get the response stream.
System.IO.Stream respStream   = wResp.GetResponseStream();
// Dim reader As StreamReader = New StreamReader(respStream)
System.IO.StreamReader reader = new System.IO.StreamReader(respStream, System.Text.Encoding.GetEncoding("gb2312"));
return   reader.ReadToEnd();}
catch(System.Exception ex)
{
errorMsg = ex.Message ;
}
return "";
}
你可以用这个函数获取网页的客户端的html代码,然后保存到.html文件里就可以了。方案2
生成单个的静态页面不是难点,难的是各个静态页面间的关联和链接如何保持完整;
特别是在页面频繁更新、修改、或删除的情况下;像阿里巴巴的页面也全部是html的,估计用的是地址映射的功能
关于地址映射可参考:http://www.easewe.com/Article/ShowArticle.aspx?article=131可以看看这个页面,分析一下他的“竞价倒计时”功能
http://info.china.alibaba.com/news/subject/v1-s5011580.html?head=top4&Bidding=home5ASP.Net
生成静态HTML
Asp中实现的生成静态页用到的FileSystemObject对象!
.Net中涉及此类操作的是System.IO
以下是程序代码注:此代码非原创!参考别人代码   CODE:  
//
生成HTML
   public static bool WriteFile(string strText,string strContent,string strAuthor)
   {
    string path = HttpContext.Current.Server.MapPath("/news/");
    Encoding code = Encoding.GetEncoding("gb2312");
    //
读取模板文件
    string temp = HttpContext.Current.Server.MapPath("/news/text.html");
    StreamReader sr=null;
    StreamWriter sw=null;
    string str=""; 
    try
    {
     sr = new StreamReader(temp, code);
     str = sr.ReadToEnd(); //
读取文件
    }
    catch(Exception exp)
    {
     HttpContext.Current.Response.Write(exp.Message);
     HttpContext.Current.Response.End();
     sr.Close();
    }
 
  
    string htmlfilename=DateTime.Now.ToString("yyyyMMddHHmmss")+".html";
    //
替换内容
    //
这时,模板文件已经读入到名称为str的变量中了
    str =str.Replace("ShowArticle",strText); //
模板页中的ShowArticle
    str = str.Replace("biaoti",strText);
    str = str.Replace("content",strContent);
    str = str.Replace("author",strAuthor);
    //
写文件
    try
    {
     sw = new StreamWriter(path + htmlfilename , false, code);
     sw.Write(str);
     sw.Flush();
    }
    catch(Exception ex)
    {
     HttpContext.Current.Response.Write(ex.Message);
     HttpContext.Current.Response.End();
    }
    finally
    {
     sw.Close();
    }
    return true;
此函数放在Conn.CS基类中了
在添加新闻的代码中引用注:工程名为Hover     if(Hover.Conn.WriteFilethis.Title.Text.ToString),this.Content.Text.ToString),this.Author.Text.ToString)))
     {
      Response.Write("
添加成功");
     }
     else
     {
      Response.Write("
生成HTML出错!");
     }

  • 模板页Text.html代码
       CODE:  
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
       <title>ShowArticle</title>
        <body>
    biaoti
    <br/>
    content<br/>
    author
    </body>
    </HTML>
    biaoti
    <br/>
    content<br/>
    author
    </body>
    </HTML>
提示添加成功后会出以当前时间为文件名的 html 文件 ! 上面只是把传递过来的几个参数直接写入了 HTML 文件中 , 在实际应用中需要先添加数据库,然后再写入 HTML 文件方案 3
给一个客户端参考的例子( SJ
它的作用在于以客户端的方式获取某个页面的代码,然后可以做为其他用途,本例是直接输出
<script>
     var oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
     oXmlHttp.open("GET","http://www.163.com", false);
     oXmlHttp.send()
     var oStream = new ActiveXObject("ADODB.Stream");
     if(oStream == null)
         alert("
您的机器不支持 ADODB.Stream.")
     else
     {
         oStream.Type=1;
         oStream.Mode=3;
         oStream.Open() ;
         oStream.Write(oXmlHttp.responseBody);
         oStream.Position= 0;
         oStream.Type= 2;
         oStream.Charset="gb2312";
         var result= oStream.ReadText();
         oStream.Close();
         oStream = null;
   var aa = window.open("","")
   document.write(result);
         aa.document.write(result);
     }
</script>
方案 4 :学 csdn 一样。用 xml 保存数据,模版 XSL 也只有一个文件。
使用 xml 来保存数据,使用 xsl 来定义模板并且生称数据。可以通过 xsl 来很方便的在客户端或者服务段显示数据。如果要生成静态叶面那更简单了。去查一下 .net xml 类包问题解决。
            
优点:可以方便快速转换成你想要的格式和内容。
            
缺点:需要学习更多的内容,不好入门。方案 5
思路    1. 利用如 Dw-Mx 这样的工具生成 html 格式的模板,在需要添加格式的地方加入特殊标记 ( $htmlformat$), 动态生成文件时利用代码读取此模板,然后获得前台输入的内容,添加到此模板的标记位置中,生成新文件名后写入磁盘,写入后再向数据库中写入相关数据。
        2.
使用后台代码硬编码 Html 文件,可以使用 HtmlTextWriter 类来写 html 文件。
优点    1. 可以建立非常复杂的页面,利用包含 js 文件的方法,在 js 文件内加入 document.write() 方法可以在所有页面内加入如页面头,广告等内容。   2. 静态 html 文件利用 MS Windows2000 Index Server 可以建立全文搜索引擎,利用 asp.net 可以以 DataTable 的方式得到搜索结果。而 Win2000 Index 服务无法查找 xml 文件的内容。如果包括了数据库搜索与 Index 索引双重查找,那么此搜索功能将非常强大。   3. 节省服务器的负荷,请求一个静态的 html 文件比一个 aspx 文件服务器资源节省许多。缺点   

思路二:如果用硬编码的方式,工作量非常大,需要非常多的
html 代码。调试困难。而且使用硬编码生成的 html 样式无法修改,如果网站更换样式,那么必须得重新编码,给后期带来巨大的工作量。  

因此这里采用的是第一种思路
  示列代码  

1.
定义 (template.htm)html 模板页面   
html   
head >  
title >< /title   
meta http-equiv="Content-Type" content="text/html; charset=gb2312"   
/head   
body >  
table $htmlformat[0] height="100%" border="0" width="100%" cellpadding="10" cellspacing="0" bgcolor="#eeeeee" style="border:1px solid #000000"   
tr   
td width="100%" valign="middle" align="left"   
span style="color: $htmlformat[1];font-size: $htmlformat[2]" $htmlformat[3] /span >  
/td   
/tr   
/table   
/body   
/html >  

2.asp.net
代码:  
//--------------------- html 模板页面到 stringbuilder 对象里 ----   
string[] format=new string[4];// 定义和 htmlyem 标记数目一致的数组  
StringBuilder htmltext=new StringBuilder();   
try   
{   using (StreamReader sr = new StreamReader(" 存放模板页面的路径和页面名 "))   
 
{    String line;    while ((line = sr.ReadLine()) != null)    {     htmltext.Append(line);    }    sr.Close();     }  
 
}   
catch   
{     Response.Write(" Script alert(' 读取文件错误 ') /Script ");    }  
//--------------------- 给标记数组赋值 ------------   
format[0]="background="bg.jpg"";// 背景图片   
format[1]= "#990099";// 字体颜色   
format[2]="150px";// 字体大小  
format[3]= " marquee >生成的模板 html 页面< /marquee ";// 文字说明  
//---------- 替换 htm 里的标记为你想加的内容   
for(int i=0;i 4;i++)    {     htmltext.Replace("$htmlformat["+i+"]",format[i]);    }  

 
//---------- 生成 htm 文件 ------------------ ――   

try
  
{
using(StreamWriter sw=new StreamWriter(" 存放路径和页面名 ",false,System.Text.Encoding.GetEncoding("GB2312")))    {     sw.WriteLine(htmltext);     sw.Flush();     sw.Close();    }
}   
catch    { Response.Write ("The file could not be wirte:");   }   

小结

  用此方法可以方便的生成 html 文件。程序使用了是循环替换,因此对需替换大量元素的模板速度非常快

转载于:https://www.cnblogs.com/yangxiao/articles/957982.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值