惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

博客园 - 孙英雄

C# 窗体抖动 “嵌入式资源”的调用 - 孙英雄 - 博客园 SQL2000与Oracle的分布式操作 只能输入数字的TextBox---补充 只能输入数字的TextBox DevExpress7.3.4部分控件继承后无法编辑解决方案 Mssql安全设置 ASP.NET跨页面传值技巧总结 预报:卡巴斯基v6.0个人版KEY获取器---修正版 - 孙英雄 - 博客园 动态读取App.Config WEB开发调试利器:Firebug SQL函数 关注SharpDevelop的一些问题 又一款Auto病毒专杀工具,可解决双击无法打开盘符的问题 Office2007体验及下载 简单讲述基于SQL SERVER 分页的存储过程 Access中的模糊查询 - 孙英雄 - 博客园 DataGrid控件排序方法 Asp.net中的常用小技巧
.NET中如何生成静态页 - 孙英雄 - 博客园
孙英雄 · 2007-05-08 · via 博客园 - 孙英雄


如何生成静态页:
 
  
  方案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=home5 
  
  ASP.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文件。程序使用了是循环替换,因此对需替换大量元素的模板速度非常快。
原文:http://www.chinaz.com/Program/.NET/050N1612007.html