动态页静态化初探
2010-06-23 09:37 ☆冷枫☆ 阅读(288) 评论(2) 编辑 收藏 举报动态页静态化目前是一个比较常见的功能了,具体的优劣这里就不在赘述了。就目前自己的了解情况,对知识点做个简单的总结。后期会随着理解的深入不断的修正完善!好了,切入正题吧。
静态化处理的第一步首先需要新建一个模板页,用于将动态页面生成对应的静态页面。如下所示:
接下来第二步需要编写读写模板的程序代码(主要思路是:读取模板文件以流的方式输出,然后将输出的字符串中的特定字符替换成动态内容,最终写入文件后生成对应静态页到本地),示例代码如下:
代码
/// <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();
}
}
/// 读取文件内容
/// </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(10000, 99999).ToString();
//以日期为文件夹目录,不存在则创建相应的目录
DirectoryInfo di = new DirectoryInfo(Server.MapPath("html/"+date+""));
if (di.Exists)
{ }
else {
di.Create();
}
//替换完成后替换成静态页面
WriteFileInfo(str, Server.MapPath("html/"+date+"/"+count+".shtml"), "gb2312");
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(10000, 99999).ToString();
//以日期为文件夹目录,不存在则创建相应的目录
DirectoryInfo di = new DirectoryInfo(Server.MapPath("html/"+date+""));
if (di.Exists)
{ }
else {
di.Create();
}
//替换完成后替换成静态页面
WriteFileInfo(str, Server.MapPath("html/"+date+"/"+count+".shtml"), "gb2312");
做到这一步后,一个简单的静态页面就可以正确的生成了。当然,这里面还可以拓展许多其他的功能点,比如定时生成静态文件等等。这些细节将会在后期不断的完善,这只是算一个菜鸟的初步尝试吧。。。
励志博客园--优秀的阅读、励志、交流学习平台。您的网上心灵家园!