代码改变世界

动态页静态化初探

2010-06-23 09:37  ☆冷枫☆  阅读(288)  评论(2编辑  收藏  举报

        动态页静态化目前是一个比较常见的功能了,具体的优劣这里就不在赘述了。就目前自己的了解情况,对知识点做个简单的总结。后期会随着理解的深入不断的修正完善!好了,切入正题吧。

        静态化处理的第一步首先需要新建一个模板页,用于将动态页面生成对应的静态页面。如下所示:

        

<table border="1" style="BORDER-COLLAPSE: collapse" width="100%" cellpadding="2" cellspacing="2">
<tr><td><a href="{$url$}">{$title$}</a>
<br>作者{$author$}  更新时间  {$time$}</td></tr>
<tr><td>概要信息:{$description$}</td></tr><tr><td>{$content$}</td></tr>
</table>

 

       

      接下来第二步需要编写读写模板的程序代码(主要思路是:读取模板文件以流的方式输出,然后将输出的字符串中的特定字符替换成动态内容,最终写入文件后生成对应静态页到本地),示例代码如下:

   

代码
    /// <summary>
    
/// 读取文件内容
    
/// </summary>
    
/// <param name="strFilePath">文件路径</param>
    
/// <returns>文件内容字符串</returns>
    
/// <param name="strEncodingName">编码名称(GB2312,UTF-8等)</param>
    public string ReadFileInfo(string strFilePath, string strEncodingName)
    {
        
string strFile = string.Empty;
        StreamReader sr 
= new StreamReader(strFilePath, System.Text.UnicodeEncoding.GetEncoding(strEncodingName));
        
try
        {
            strFile 
= sr.ReadToEnd();
        }
        
catch (Exception e)
        {
        }
        
finally
        {
            sr.Close();
        }
        
return strFile;
    }

    
/// <summary>
    
/// 写Html文件的方法
    
/// </summary>
    
/// <param name="strHtml">写入的字符串</param>
    
/// <param name="strDestinationFilePath">目的存放文件路径</param>
    
/// <param name="strEncodingName">编码方式(GB2312,UTF-8等)</param>
    public void WriteFileInfo(string strHtml, string strDestinationFilePath, string strEncodingName)
    {
        StreamWriter sw 
= new StreamWriter(strDestinationFilePath, false, System.Text.UnicodeEncoding.GetEncoding(strEncodingName));
        
try
        {
            sw.Write(strHtml);
            sw.Flush();
        }
        
catch (Exception e)
        {
 }
        
finally
        {
            sw.Close();
        }
    }

 

      

          第三步,调取对应的读写操作方法,替换内容、生成静态页;示例如下:

      

           //替换特定字符串内容,其中传递的参数是在数据库或动态提取的数据
            String str = ReadFileInfo(Server.MapPath("htmltemp.htm"), "gb2312");
            str 
=str.Replace("{$title$}", title);
            str 
=str.Replace("{$url$}", url);
            str 
=str.Replace("{$author$}",author);
            str 
= str.Replace("{$time$}", DateTime.Now.ToString("yyyy-MM-dd"));
            str 
=str.Replace("{$description$}", description);
            str 
= str.Replace("{$content$}", content);
            
            
//设置生成文件的名称规则
            String date = DateTime.Now.ToString("yyyy-MM-dd");
            Random rand 
= new Random();
            
string count = "00000"+rand.Next(1000099999).ToString();
          
          
//以日期为文件夹目录,不存在则创建相应的目录
          DirectoryInfo di = new DirectoryInfo(Server.MapPath("html/"+date+""));
          
if (di.Exists)
          { }
          
else {
            di.Create();
          }

         
//替换完成后替换成静态页面
         WriteFileInfo(str, Server.MapPath("html/"+date+"/"+count+".shtml"), "gb2312");

 

         做到这一步后,一个简单的静态页面就可以正确的生成了。当然,这里面还可以拓展许多其他的功能点,比如定时生成静态文件等等。这些细节将会在后期不断的完善,这只是算一个菜鸟的初步尝试吧。。。